Apakah mengekspor nama fungsi mengekspor semua versi fungsi yang berbeda di Julia?

9

Saya memiliki beberapa fungsi / pengiriman untuk nama fungsi yang sama. Saya ingin memastikan semuanya diekspor. Apakah saya hanya perlu memasukkan nama fungsi dalam pernyataan ekspor dan membiarkan Julia melakukan sisanya?

Contoh:

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

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

export hello

Apakah keduanya akan diekspor hanya dengan melakukan export hello?

logankilpatrick
sumber

Jawaban:

7

Ya, Anda mengekspor nama fungsi, dan fungsi itu memiliki dua metode dalam hal ini, dan keduanya akan tersedia.

Dan untuk menambahkan, tidak ada cara untuk mengekspor sebagian dari metode.

fredrikekre
sumber
5

Betul. Sebenarnya, tidak ada versi exportpernyataan yang memungkinkan Anda memilih metode mana yang akan diekspor. Anda mengekspor fungsi .

Berikut ini beberapa kode yang menggambarkan perilaku tersebut:

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
essenciary
sumber