Exportiert der Export eines Funktionsnamens alle verschiedenen Funktionsversionen in Julia?

9

Ich habe mehrere Funktionen / Versendungen für den gleichen Funktionsnamen. Ich möchte sicherstellen, dass alle exportiert werden. Muss ich nur den Namen der Funktion in die Exportanweisung aufnehmen und dann Julia den Rest erledigen lassen?

Beispiel:

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

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

export hello

Werden beide durch einfaches Exportieren exportiert export hello?

logankilpatrick
quelle

Antworten:

7

Ja, Sie exportieren den Funktionsnamen, und diese Funktion verfügt in diesem Fall über zwei Methoden, und beide sind verfügbar.

Außerdem gibt es keine Möglichkeit, eine Teilmenge der Methoden zu exportieren.

fredrikekre
quelle
5

Das stimmt. Tatsächlich gibt es keine Version der exportAnweisung, mit der Sie auswählen können, welche Methode exportiert werden soll. Sie exportieren die Funktion .

Hier ist ein Code, der das Verhalten veranschaulicht:

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
essentiell
quelle