L'esportazione del nome di una funzione esporterà tutte le diverse versioni di funzioni in Julia?


9

Ho più funzioni / spedizioni per lo stesso nome di funzione. Voglio assicurarmi che siano tutti esportati. Devo solo includere il nome della funzione nell'istruzione export e lasciare che Julia faccia il resto?

Esempio:

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

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

export hello

Entrambi verranno esportati semplicemente facendo export hello?

Risposte:


7

Sì, esporti il ​​nome della funzione, e quella funzione ha due metodi in questo caso, ed entrambi saranno disponibili.

E per aggiungere, non c'è modo di esportare un sottoinsieme dei metodi.


5

Giusto. In realtà, non esiste una versione exportdell'istruzione che consenta di scegliere il metodo da esportare. Si esporta la funzione .

Ecco un po 'di codice che illustra il 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.