Чи буде експортувати ім’я функції експортувати всі різні версії функцій у Julia?


10

У мене є кілька функцій / розсилок для однієї і тієї ж назви функції. Я хочу переконатися, що вони всі експортуються. Мені просто потрібно включити ім'я функції в оператор експорту, і тоді Юлія зробить все інше?

Приклад:

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

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

export hello

Чи буде обидва вони експортовані лише тим, що роблять export hello?

Відповіді:


7

Так, ви експортуєте ім'я функції, і ця функція має два способи в цьому випадку, і обидва вони будуть доступні.

І додати, немає можливості експортувати підмножину методів.


5

Це вірно. Насправді, не існує версії exportзаяви, яка б дозволила вам вибрати, який метод експортувати. Ви експортуєте функцію .

Ось код, який ілюструє поведінку:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.