6
Мне было интересно, есть ли способ использовать Символы для множественной отправки, а также включить «метод catch-all». то есть что-то вродеОбщая отправка с символами
function dispatchtest{alg<:Symbol}(T::Type{Val{alg}})
println("This is the generic dispatch. The algorithm is $alg")
end
function dispatchtest(T::Type{Val{:Euler}})
println("This is for the Euler algorithm!")
end
Второй работает и соответствует то, что в руководстве, я просто интересно, как вы получите первый один работать.
Обратите внимание, что производительность этого, вероятно, будет хуже, чем просто Условный еще о том, что проверяет для конкретных значений символов, а также медленнее, чем поиск символов в словаре, поэтому для этого нет эффективного варианта использования. Если вам не нужна расширяемость, используйте if-else; если вам нужна расширяемость, используйте dict. – StefanKarpinski
Не могли бы вы предоставить нам хороший вариант использования для типов значений? Крису нужна расширяемость. Вы хотите использовать глобальный Dict? Это может быть проблемой с прекомпиляцией, если я правильно понимаю. – SalchiPapa
Как это влияет на производительность, действительно зависит от того, насколько дорого стоит эта функция. В моем случае функции очень дорогостоящие, и будет ли это заявление if-else тысячами, если не десятками тысяч раз, где еще цена отправки будет выплачена один раз (и она незначительна, измеряется, вероятно, в микросекундах по сравнению с протоколом/часов фактического вызова функции). В этом случае я нашел это решение, действительно помогая производительности. Как всегда, ориентир для вашего конкретного случая. –