L'exportation d'un nom de fonction exportera-t-elle toutes les différentes versions de fonction dans Julia?

9

J'ai plusieurs fonctions / répartitions pour le même nom de fonction. Je veux m'assurer qu'ils sont tous exportés. Dois-je simplement inclure le nom de la fonction dans l'instruction d'exportation et laisser Julia faire le reste?

Exemple:

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

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

export hello

Les deux seront-ils exportés en faisant simplement export hello?

logankilpatrick
la source

Réponses:

7

Oui, vous exportez le nom de la fonction, et cette fonction a deux méthodes dans ce cas, et les deux seront disponibles.

Et pour ajouter, il n'y a aucun moyen d'exporter un sous-ensemble des méthodes.

fredrikekre
la source
5

C'est vrai. En fait, il n'existe aucune version de l' exportinstruction qui vous permettrait de choisir la méthode à exporter. Vous exportez la fonction .

Voici du code qui illustre le comportement:

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
essentiel
la source