Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reflection “究竟是什么?”;与Core.Compiler“交互”;在生成的函数中未定义?_Reflection_Compilation_Julia - Fatal编程技术网

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的内容或方法交互

  • 在这种情况下,“互动”到底是什么意思?只是在生成的函数中使用
    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
    ?因为我是从盒式磁带复制代码的,问他们:)但一般问题仍然存在。