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

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

这个逻辑适用于所有反射宏,使用带有 (function, collection of types) 的变体函数.

引用:
  • 宏@code_warntype 具有函数变体:@code_warntype
  • 宏如何生成:macro generator
  • 实用函数到达类型:gen_call_with_extracted_types
  • 关于julia - 如何使用 splat 运算符注释类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850907/

    相关文章:

    oop - 分配对象引用而不是对象

    julia - Julia 有三元条件运算符吗?

    julia - 将字典的键和值导出为变量名称和值

    ruby - 为什么在这里的数组定义中使用了 splat?

    powershell - 使用通用参数在本地或远程执行Powershell脚本

    ruby - 字符串文字前面的 * 在 ruby​​ 中有什么作用?

    parallel-processing - Julia:并行代码比顺序代码慢,有remotecall()的替代方法吗?

    julia - Julia 中特定于操作系统的 PATH 分隔符

    mvvm - ReactiveUI.Routing 对 Splat 的依赖

    ruby - 如何同时使用 splat 和可选哈希在 ruby​​ 中定义方法?