4

splat 演算子を使用するときに、引数の型にどのように注釈を付けることができますか?

f(x, y) = x^2 + y^2
vec = [1.0, 2.0, 'a']
f(vec[1:2]...)

...関数呼び出しでその使用に注釈を付けるにはどうすればよいですか。また、コードを表示するマクロ ( @code_llvm@code_lowered@code_native、) が機能しないことに注意してください。@code_typed@code_warntype

4

2 に答える 2

1

上記の使用例では、リフレクション関数のマクロ バージョンが正しい引数の型に到達できなかったように思われるため、マクロの代わりに元の関数を使用すると役立つ場合があります。

f(x, y) = x^2 + y^2
vec = [1.0, 2.0, 'a']
@code_warntype(f(vec[1:2]...)) # => Nothing
code_warntype(f,map(typeof,vec[1:2])) 
#  Variables:
#  x::Float64
#  y::Float64
#  .....

このロジックは、バリアント関数と(function, collection of types).

参照:

  1. マクロ @code_warntype には関数バリアントがあります: @code_warntype
  2. マクロの生成方法:マクロ ジェネレーター
  3. タイプに到達するユーティリティ関数: gen_call_with_extracted_types
于 2015-11-22T05:27:16.407 に答える