Просто передайте типы аргументов как кортеж во втором позиционном аргументе edit
.
Например, edit(sin, (Int,))
откроет вам определение sin
, которое используется с одним аргументом типа Int
.
Обратите внимание, что это может не сработать, если вы хотите отредактировать функцию из stdlib (для функций из Base или нестандартных библиотек edit
будет работать правильно).
В таком случае вы должны использовать функцию methods
и найти файл вручную. Например:
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},))
чтобы получить то, что вы хотите.