在Julia中,有没有办法编写一个基于其参数的(编译时)类型进行分支的宏,至少对于可以在编译时推断其类型的参数?就像,在下面的例子中,我code_type
编写了一个名为的函数,它返回编译时类型x
.有没有这样的功能,或产生这种行为的任何方式?(或者在推断出类型之前,宏会扩展,这样就不可能做到这一点.)
macro report_int(x)
code_type(x) == Int64 ? "it's an int" : "not an int"
end
Run Code Online (Sandbox Code Playgroud)
宏不能这样做,但生成的函数可以.
查看文档:http://julia.readthedocs.org/en/latest/manual/metaprogramming/#generated-functions
除了 spencerlyon2 的答案之外,另一种选择是生成显式分支:
macro report_int(x)
:(isa(x,Int64) ? "it's an int" : "not an int")
end
Run Code Online (Sandbox Code Playgroud)
如果@report_int(x)
在函数内部使用,并且x
可以推断出的类型,那么 JIT 将能够优化掉死分支(标准库中的@evalpoly
宏使用这种方法)。
归档时间: |
|
查看次数: |
226 次 |
最近记录: |