获取功能签名

时间:2017-09-20 12:01:01

标签: julia

有没有办法在运行时获取函数的签名?我想在调用该函数之前检查签名。类似的东西:

exp = @sig func
if "kw" ∈ string(exp)
  func(kw=value)
end

2 个答案:

答案 0 :(得分:4)

如我的评论中所述,我认为您正在寻找methods(func)

答案 1 :(得分:0)

在Julia 1.1中,可以通过以下方式获得签名:

julia> function test(a::Integer, b::Integer, c::Integer)
       end
test (generic function with 2 methods)
julia> function extractSig(x) methods(x).ms[1].sig end
julia> extractSig(test)
Tuple{typeof(test),Integer,Integer,Integer}

如果需要签名的符号,则以下基本函数在Julia 1.1中就足够了

Base.method_argnames(methods(x).ms[1])

值得注意的是,上面的代码仅考虑了函数的第一个定义。可能会有更多的重载定义