Будет ли экспорт имени функции экспортировать все различные версии функций в Юлии?

9

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

Пример:

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

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

export hello

Будут ли оба они экспортироваться, просто делая export hello?

logankilpatrick
источник

Ответы:

7

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

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

fredrikekre
источник
5

Вот так. На самом деле, нет версии 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
essenciary
источник