6
Zastanawiałem się, czy istnieje sposób na użycie symboli do wielokrotnej wysyłki, ale także "metodą catch-all". czyli cośGeneryczna wysyłka z symbolami
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
Drugi działa i pasuje co jest w instrukcji, po prostu zastanawiasz się, jak można dostać pierwszy do pracy.
Należy pamiętać, że wydajność może to być mniej dobre niż tylko o instrukcję if-else, który sprawdza konkretne wartości symboli, a także wolniejsze niż wyszukiwanie symboli w słowniku, więc nie ma na to żadnego pożytecznego przykładu. Jeśli nie potrzebujesz rozszerzalności, użyj if-else; jeśli potrzebujesz rozszerzalności, użyj dyktowania. – StefanKarpinski
Czy możesz podać nam dobry przykład użycia dla typów wartości? Chris potrzebuje rozszerzalności. Czy zamiast tego używasz globalnego Dicta? To może być problem z prekompilacją, jeśli dobrze rozumiem. – SalchiPapa
Jak to wpływa na wydajność, naprawdę zależy od tego, jak kosztowna jest ta funkcja. W moim przypadku, funkcje są bardzo kosztowne i czy w przypadku słowa "else" tysiące, jeśli nie dziesiątki tysięcy razy, gdzie indziej cena wysyłki jest płatna raz (i malejąca, mierzona prawdopodobnie w mikrosekundach w porównaniu do minut/godziny rzeczywistego wywołania funkcji). Znalazłem to rozwiązanie jako naprawdę pomocne w tym przypadku. Jak zawsze, wzorzec dla konkretnego przypadku. –