Julia JIT编译器针对在REPL中调用的每个唯一函数签名分别编译通用函数的不同版本。例如,如果foo
定义为
foo(x, y) = (x * y) ^ 2
然后调用foo(2, 3)
和foo("a", "b")
将编译分别对应于签名foo
和foo(::Int, ::Int)
的foo(::String, ::String)
的两个不同版本。有没有一种方法可以获取为通用函数编译的不同函数签名的列表?我知道
methods
函数,但是methods
仅列出了程序员编写的通用函数的方法。而且,当然,如上面的foo
示例所示,程序员编写的一种方法可以产生许多单独的编译函数。我只是出于教育目的而问这个。我没有打算使用假设功能的结果显示所有已编译功能签名的代码。
最佳答案
MethodAnalysis软件包具有用于此目的的工具以及更多其他工具。例如:
julia> foo(x, y) = (x * y) ^ 2
foo (generic function with 1 method)
julia> foo(1,1); foo(1.0, 1);
julia> using MethodAnalysis
julia> methodinstances(foo)
2-element Vector{Core.MethodInstance}:
MethodInstance for foo(::Int64, ::Int64)
MethodInstance for foo(::Float64, ::Int64)
在某些情况下,这些专长不是svec
,而methodinstances
使其更易于以易于访问的格式收集它们。
关于julia - 获取为通用函数编译的所有函数签名的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235693/