使用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