在Julia中,宏能否访问其参数的推断类型?

在Julia中,宏能否访问其参数的推断类型?,julia,Julia,在Julia中,是否有一种方法可以编写一个宏,该宏根据其参数的(编译时)类型进行分支,至少对于其类型可以在编译时推断的参数是这样?就像下面的例子一样,我构造了一个名为code\u type的函数,它返回编译时类型x。有没有这样的功能,或者有没有产生这种行为的方法?(或者宏是在推断类型之前展开的,这样做是不可能的。) 宏不能这样做,但生成的函数可以 查看此处的文档:除了Spenceryon2的答案之外,另一个选项是只生成显式分支: macro report_int(x) :(isa(x,I

在Julia中,是否有一种方法可以编写一个宏,该宏根据其参数的(编译时)类型进行分支,至少对于其类型可以在编译时推断的参数是这样?就像下面的例子一样,我构造了一个名为
code\u type
的函数,它返回编译时类型
x
。有没有这样的功能,或者有没有产生这种行为的方法?(或者宏是在推断类型之前展开的,这样做是不可能的。)


宏不能这样做,但生成的函数可以


查看此处的文档:

除了Spenceryon2的答案之外,另一个选项是只生成显式分支:

macro report_int(x)
    :(isa(x,Int64) ? "it's an int" : "not an int")
end

如果函数内部使用了
@report\u int(x)
,并且可以推断出
x
的类型,那么JIT将能够优化掉死分支(这种方法由标准库中的使用).

只是一个小小的迂腐注释:生成的函数对其参数的实际类型而不仅仅是推断类型进行操作。(如果函数是类型稳定的,则两者是相同的)。很好。我还应该提到,这仅适用于最近的0.4dev版本。
macro report_int(x)
    :(isa(x,Int64) ? "it's an int" : "not an int")
end