Действительно ли вы хотите, чтобы дополнительная версия функции была скомпилирована для каждого символа? Дополнительная компиляция довольно дорогая, и компилятор должен будет вставить ветку в любом случае ... вы не получите никакой производительности, отправив на значение.
Вместо этого, вы, вероятно, следует писать код, как это:
function test(x::Symbol)
if x == :ALPHA
...
elseif x == :BETA
...
else
throw(ArgumentError("Expected :ALPHA or :BETA"))
end
end
или, если вам не нравится, как это выглядит, рассмотрите возможность использования по шаблону с Match.jl:
test(x::Symbol) = @match x begin
:ALPHA => ...
:BETA => ...
_ => throw(ArgumentError("Expected :ALPHA or :BETA"))
end
Если вам действительно нужно отправку, вы можете использовать тип для обертывания значения, например Val{:ALPHA}
. Этот тип необходимо создать на сайте вызывающего абонента. В 99% ситуаций это плохая идея. Помните, что это не мешает ветке при вызове функции, и на самом деле делает ее медленнее, поскольку отправка более дорогая, чем ветка.
Возможно, «Вал» - это то, что вам нужно. – jverzani
Или просто 'if' :) – StefanKarpinski
Вы о шаблоне соответствия? Нет, он не реализуется в Julia, но вы можете посмотреть на это: https://github.com/toivoh/julia-pattern-dispatch и этот https://matchjl.readthedocs.io/en/latest/ –