Reflection “究竟是什么?”;与Core.Compiler“交互”;在生成的函数中未定义?
在某一点上的文档说明如下: 一些不应尝试的操作包括:Reflection “究竟是什么?”;与Core.Compiler“交互”;在生成的函数中未定义?,reflection,compilation,julia,Reflection,Compilation,Julia,在某一点上的文档说明如下: 一些不应尝试的操作包括: 以任何方式与Core.Compiler的内容或方法交互 在这种情况下,“互动”到底是什么意思?只是在生成的函数中使用Core.Compiler中未定义的行为 我的用例是从IRToolsdynamo(构建生成的函数)中检测内置函数,但您可以参考以下虚拟代码(受其启发),其中包含我想要执行的实际“交互”: julia> @generated function foo(f, args...) mod = Core.Co
Core.Compiler
中未定义的行为
我的用例是从IRTools
dynamo(构建生成的函数)中检测内置函数,但您可以参考以下虚拟代码(受其启发),其中包含我想要执行的实际“交互”:
julia> @generated function foo(f, args...)
mod = Core.Compiler.typename(f).module
is_builtin = ((f <: Core.Builtin) && !(mod === Core.Compiler))
if is_builtin
quote
println("$f is builtin")
f(args...)
end
else
:(f(args...))
end
end
foo (generic function with 1 method)
julia> foo(+, 1, 2)
3
julia> foo(Core.tuple, 1, 2)
tuple is builtin
(1, 2)
julia>@生成的函数foo(f,args…)
mod=Core.Compiler.typename(f.module)
is_builtin=(f foo(+,1,2)
3.
julia>foo(Core.tuple,1,2)
元组是内置的
(1, 2)
这似乎没有问题。为什么不直接使用
Base.typename
?因为我是从盒式磁带复制代码的,问他们:)但一般问题仍然存在。