A exportação de um nome de função exportará todas as diferentes versões de função em Julia?

9

Eu tenho várias funções / despachos para o mesmo nome de função. Quero garantir que todos sejam exportados. Eu só preciso incluir o nome da função na instrução de exportação e deixar Julia fazer o resto?

Exemplo:

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

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

export hello

Os dois serão exportados apenas fazendo export hello?

logankilpatrick
fonte

Respostas:

7

Sim, você exporta o nome da função, e essa função possui dois métodos nesse caso, e os dois estarão disponíveis.

E para adicionar, não há como exportar um subconjunto dos métodos.

fredrikekre
fonte
5

Está certo. Na verdade, não existe uma versão da exportdeclaração que permita escolher qual método exportar. Você exporta a função .

Aqui está um código que ilustra o comportamento:

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
essencial
fonte