Bir işlev adının dışa aktarılması Julia'daki tüm farklı işlev sürümlerini dışa aktarır mı?


10

Aynı işlev adı için birden fazla işlev / dağıtım var. Hepsinin ihraç edildiğinden emin olmak istiyorum. Sadece işlevin adını export deyimine eklemem ve gerisini Julia'nın gerisini yapmasına izin vermeli miyim?

Misal:

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

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

export hello

Her ikisi de sadece yaparak ihraç edilecek export hellomi?

Yanıtlar:


7

Evet, işlev adını dışa aktarırsınız ve bu durumda bu işlevin iki yöntemi vardır ve her ikisi de kullanılabilir olacaktır.

Ve eklemek için, yöntemlerin bir alt kümesini dışa aktarmanın bir yolu yoktur.


5

Doğru. Aslında, exportifadenin hangi yöntemi dışa aktaracağınızı seçmenize izin verecek bir sürümü yoktur . İşlevi dışa aktarın .

Davranışı gösteren bazı kodlar şunlardır:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.