julia - 获取为通用函数编译的所有函数签名的列表

标签 julia

Julia JIT编译器针对在REPL中调用的每个唯一函数签名分别编译通用函数的不同版本。例如,如果foo定义为

foo(x, y) = (x * y) ^ 2
然后调用foo(2, 3)foo("a", "b")将编译分别对应于签名foofoo(::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/

相关文章:

matlab - 在 Julia 中使用 LsqFit

julia - 有没有办法像 C++ 一样创建没有输入参数的模板函数?

julia - Julia 中最小值的位置

arrays - 调整矩阵大小

sorting - 如何在Julia中按给定元素对元组进行排序?

function - 当参数可能是两种类型之一时如何声明(和传递)Julia 函数参数

julia - julia 轮函数是否包含大数错误?

csv - 如何从字符串中读取 CSV?

polymorphism - Julia 函数签名中的 "not a subtype of"

casting - 如何检查整数值是否已保存在 float 中?