Methods 如何指定类型签名以在Julia中使用InteractiveUtils.edit查找特定方法?
为了快速找到一些方法的实现,我想使用Methods 如何指定类型签名以在Julia中使用InteractiveUtils.edit查找特定方法?,methods,julia,type-signature,Methods,Julia,Type Signature,为了快速找到一些方法的实现,我想使用interactiveeutils.edit 例如,如果我想看到methodswith的实现,我应该能够编写类似edit(methodswith)的东西。但是,由于带有函数的方法有多种方法,我得到: ERROR: function has multiple methods; please specify a type signature 如何指定类型签名?我知道我可以通过方法(methodswith)找出有哪些方法,并给出如下签名: [1] methodsw
interactiveeutils.edit
例如,如果我想看到methodswith
的实现,我应该能够编写类似edit(methodswith)
的东西。但是,由于带有函数的方法有多种方法,我得到:
ERROR: function has multiple methods; please specify a type signature
如何指定类型签名?我知道我可以通过方法(methodswith)
找出有哪些方法,并给出如下签名:
[1] methodswith(t::Type; supertypes) in InteractiveUtils at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/InteractiveUtils/src/InteractiveUtils.jl:169
如何将其插入到调用edit
我知道有一个@edit
,我可以在一些示例性函数调用中使用它。然而,有时只指定类型更为简单,因为为方法的示例性调用构造对象还涉及对有效构造函数的一些调查
TL;医生:
如何使用Julia中的interactiveeutils.edit
找到函数的特定方法?只需将参数类型作为第二个位置参数中的元组传递给edit
例如,edit(sin,(Int,)
将打开与一个Int
类型的参数一起使用的sin
的定义
请注意,如果要编辑stdlib中的函数,此操作可能会失败(对于基本库或非标准库中的函数,edit
将正常工作)
在这种情况下,您必须使用方法
功能并手动定位文件。例如:
julia> using Statistics
julia> edit(mean, (Vector{Int},)) # this might not work as expected
julia> methods(mean, (Vector{Int},))
# 1 method for generic function "mean":
[1] mean(A::AbstractArray; dims) in Statistics at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1\Statistics\src\Statistics.jl:132
现在您有了文件名和方法所在的行号,但路径可能错误,因此您必须自己在Julia安装文件夹中查找该文件
下面是如何通过编程检索此信息(假设您正确指定了args
,并且只有一个方法匹配)。首先定义一个函数:
function edit_stdlib(fun, args)
m = methods(fun, args)
@assert length(m.ms) == 1 # assume we have an exact match
p = joinpath(Sys.STDLIB, splitpath(string(m.ms[1].file))[end-2:end]...)
l = m.ms[1].line
edit(p, l)
end
现在您可以编写例如edit_stdlib(mean,(Vector{Int},)
来获得您想要的