Как получить все доступные методы в моем коде, которые имеют имя c в Джулии? - PullRequest
0 голосов
/ 26 апреля 2020

Я знаю, что в моем коде есть куча разных реализаций указанного метода c, и я хочу увидеть список всех из них. Как я могу увидеть все методы с указанным именем c?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Очень удобный способ использования methods() состоит в том, чтобы ввести имя метода, затем (, а затем набрать TAB в REPL, так что для вашего примера:

rand(

, а затем нажмите клавишу TAB. Список для rand( очень длинный, хотя. Если вы продолжите писать вызов функции с аргументами и снова нажмете TAB, список будет отфильтрован по всем подходящим методам. В вашем случае:

julia> rand(1,
rand(dims::Integer...) in Random at C:\Julia\Julia-1.4.0\share\julia\stdlib\v1.4\Random\src\Random.jl:277
rand(X) in Random at C:\Julia\Julia-1.4.0\share\julia\stdlib\v1.4\Random\src\Random.jl:258
rand(X, dims::Tuple{Vararg{Int64,N}} where N) in Random at C:\Julia\Julia-1.4.0\share\julia\stdlib\v1.4\Random\src\Random.jl:280
rand(X, d::Integer, dims::Integer...) in Random at C:\Julia\Julia-1.4.0\share\julia\stdlib\v1.4\Random\src\Random.jl:283

РЕДАКТИРОВАТЬ:

Внутренне, Джулия вызывает

methods(rand, (typeof(1), Any))

, который будет соответствующим методом фильтрации в пьесе кода (к сожалению, документы пока не содержат пример)

0 голосов
/ 26 апреля 2020

В Julia Base есть функция methods, которая работает следующим образом:

julia> methods(rand) # where rand is the the function name in question
# 68 methods for generic function "rand":
[1] rand(rd::Random.RandomDevice, sp::Union{Random.SamplerType{Bool}, Random.SamplerType{Int128}, Random.SamplerType{Int16}, Random.SamplerType{Int32}, Random.SamplerType{Int64}, Random.SamplerType{Int8}, Random.SamplerType{UInt128}, Random.SamplerType{UInt16}, Random.SamplerType{UInt32}, Random.SamplerType{UInt64}, Random.SamplerType{UInt8}}) in Random at /Users/sabae/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.3/Random/src/RNGs.jl:29
[2] rand(::Random._GLOBAL_RNG, x::Union{Random.SamplerType{Int128}, Random.SamplerType{Int64}, Random.SamplerType{UInt128}, Random.SamplerType{UInt64}}) in Random at /Users/sabae/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.3/Random/src/RNGs.jl:337
#...etc

Эта функция позволяет нам видеть все функции, соответствующие имени, которое мы передали.

Также стоит отметить, что область действия этой функции может меняться в зависимости от того, какие пакеты вы используете в данный момент. Посмотрите в примере ниже, где я загружаю в пакет POMDPs, и количество доступных функций rand значительно возрастает.

julia> using POMDPs

julia> methods(rand)
# 170 methods for generic function "rand":
[1] rand(rd::Random.RandomDevice, sp::Union{Random.SamplerType{Bool}, Random.SamplerType{Int128}, Random.SamplerType{Int16}, Random.SamplerType{Int32}, Random.SamplerType{Int64}, Random.SamplerType{Int8}, Random.SamplerType{UInt128}, Random.SamplerType{UInt16}, Random.SamplerType{UInt32}, Random.SamplerType{UInt64}, Random.SamplerType{UInt8}}) in Random at /Users/sabae/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.3/Random/src/RNGs.jl:29
#.. ETC. 

Подробнее о функции methods в Документах Julia.

...