si può prendere polimorfismo alla carte come polimorfismo su richiesta.
La comunità dei Clojure è orgogliosa del termine Polymorphism à la carte a causa del fatto che Clojure supporta strategie di polimorfismo multiplo. Alcuni di essi sono:
Prototype-based polymorphism
Ereditarietà polimorfismo
Questa è la strategia polimorfismo utilizzata da Java. Clojure supporta questo per procura. Utile quando si esegue l'interoperabilità di Java.
protocollo
protocollo Clojure è TypeClass a Haskell.
Multimethod
Mentre protocolli prevedono spedizione polimorfici in base al tipo del primo argomento, multimethods sono molto più flessibile che può inviare basato su qualsiasi funzione di (eventuali) argomenti del metodo.
polimorfismo alla carte significa "scegliere quale strategia polimorfismo migliore per il vostro caso. Sono tutti nella vostra cassetta degli attrezzi".
È possibile implementare lo schema TypeClass
in Scala utilizzando impliciti. Leggi Scalaz source se vuoi esempi reali. Scala non supporta i metodi multimodali a livello di linguaggio, ma suppongo che sia possibile con l'aiuto della prossima macro 2.10.
Per quanto riguarda i vantaggi, le strategie avanzate di polimorfismo come TypeClass e Multimethod possono aiutare a risolvere Expression Problem.
"L'obiettivo è quello di definire un tipo di dati da parte dei casi, in cui si può aggiungere nuovi casi per il tipo di dati e nuove funzioni sul tipo di dati, senza ricompilare il codice esistente, e pur mantenendo la sicurezza di tipo statico (ad esempio, non calchi) ".
BTW, questa domanda è troppo grande per rientrare in una singola domanda StackOverflow. Il mio suggerimento è di familiarizzare con questi concetti, e quindi capirai la loro utilità.
Menzionato da 45:37 – Abdull