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?

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.