Jaki jest hit wydajności korzystania z wielu metod? Jeśli mam 2 funkcje o tej samej nazwie i tyle samo argumentów, które różnią się tylko typem (lista vs. int), czy mój występ będzie bardzo cierpieć?Multimethods performance
Innymi słowy, lepiej nazwać moją funkcję dodawania wektorów: "dodaj-wektor" lub pozostawić jako "dodaj" lub ewentualnie "+"?
(Dla uproszczenia zignorujmy problemy, które mogłem zmienić definiując wbudowane funkcje, takie jak "+").
chciałbym odpowiedzieć zamiast komentarza, ale ponieważ nie odnoszą się do Clojure w specyficzny, multimethods nie powinien ponosić żadnej dodatkowej kary niż normalnych wyszukiwań. Oznacza to, że jedną z implementacji jest modyfikowanie nazw, kodujących je za pomocą typów argumentów, a następnie nie powinno być żadnego narzutu. Jednak strategia wdrażania Clojure jest mi nieznana, ale jeśli użyje powyższego mechanizmu, nie będzie dodatkowego obciążenia. – jer
Tak, ponieważ clojure jest dynamicznym językiem, nie sądzę, żeby to było to samo. Również clojure używa funkcji wysyłki, która generuje klucze, które są stosowane do listy dostępnych funkcji. –
Możesz zajrzeć do 'clojure.contrib.generic' i' clojure.contrib.generic. * '(" C.c.generic.arithmetic "będzie prawdopodobnie najbardziej interesujące dla ciebie). –