Будет ли экспорт имени функции экспортировать все различные версии функций в Julia? - PullRequest
9 голосов
/ 25 апреля 2020

У меня есть несколько функций / отправок для одного и того же имени функции. Я хочу убедиться, что они все экспортируются. Нужно ли просто включить имя функции в оператор экспорта, а затем Джулия сделает все остальное?

Пример:

function hello(a::Int64, b::Int64)
   #nothing
end

function hello(a::Bool, b::Bool)
   #nothing
end

export hello

Будут ли они экспортированы, просто выполнив export hello?

Ответы [ 2 ]

7 голосов
/ 25 апреля 2020

Да, вы экспортируете имя функции, и у этой функции есть два метода в этом случае, и оба они будут доступны.

И добавить, что нет способа экспортировать подмножество методов .

5 голосов
/ 25 апреля 2020

Это верно. На самом деле, нет версии оператора export, которая позволила бы вам выбрать, какой метод экспортировать. Вы экспортируете функцию .

Вот код, который иллюстрирует поведение:

julia> module FooBar
       export foo
       foo(x::Int) = 2
       foo(x::Char) = 'A'
       end
Main.FooBar

julia> foo
ERROR: UndefVarError: foo not defined

julia> @which foo
ERROR: "foo" is not defined in module Main
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] which(::Module, ::Symbol) at .\reflection.jl:1160
 [3] top-level scope at REPL[15]:1

julia> using .FooBar

julia> @which foo
Main.FooBar

julia> methods(foo)
# 2 methods for generic function "foo":
[1] foo(x::Char) in Main.FooBar at REPL[13]:4
[2] foo(x::Int64) in Main.FooBar at REPL[13]:3
...