Czy eksport nazwy funkcji spowoduje wyeksportowanie wszystkich różnych wersji funkcji w Julii?

10

Mam wiele funkcji / wysyłek dla tej samej nazwy funkcji. Chcę się upewnić, że wszystkie zostały wyeksportowane. Czy po prostu muszę podać nazwę funkcji w wyciągu eksportowym i pozwolić Julii zrobić resztę?

Przykład:

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

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

export hello

Czy oba zostaną wyeksportowane po prostu przez zrobienie export hello?

logankilpatrick
źródło

Odpowiedzi:

7

Tak, eksportujesz nazwę funkcji, a ta funkcja ma w tym przypadku dwie metody i obie będą dostępne.

I aby dodać, nie ma możliwości wyeksportowania podzbioru metod.

fredrikekre
źródło
5

Zgadza się. W rzeczywistości nie ma wersji exportinstrukcji, która pozwalałaby wybrać metodę eksportu. Eksportujesz funkcję .

Oto kod ilustrujący zachowanie:

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
esencja
źródło