julia – 如何使用splat运算符注释类型

使用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)都不起作用,因此在使用splat时进行优化会非常困难?

最佳答案 因为似乎在上面的用例中,反射函数的宏版本无法达到正确的参数类型,使用原始函数而不是宏,可能会有所帮助:

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
#  .....

这个逻辑适用于所有反射宏,使用它们的变量函数和(函数,类型集合).

引用:

>宏@code_warntype具有函数变量:@code_warntype
>如何生成宏:macro generator
> Util功能达到类型:gen_call_with_extracted_types

点赞