¿Exportar un nombre de función exportará todas las diferentes versiones de funciones en Julia?

9

Tengo múltiples funciones / despachos para el mismo nombre de función. Quiero asegurarme de que todos se exporten. ¿Debo incluir el nombre de la función en la declaración de exportación y dejar que Julia haga el resto?

Ejemplo:

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

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

export hello

¿Se exportarán ambos simplemente export hello?

logankilpatrick
fuente

Respuestas:

7

Sí, exporta el nombre de la función, y esa función tiene dos métodos en este caso, y ambos estarán disponibles.

Y para agregar, no hay forma de exportar un subconjunto de los métodos.

fredrikekre
fuente
5

Así es. En realidad, no hay una versión de la exportdeclaración que le permita elegir qué método exportar. Exporta la función .

Aquí hay un código que ilustra el comportamiento:

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
ensayo
fuente