Vous pouvez prendre Polymorphism a la carte
comme Polymorphism on demand
.
Clojure de la communauté sont fiers du terme Polymmorphism a la carte
, en raison du fait que clojure en charge plusieurs polymorphisme des stratégies. Certains d'entre eux sont:
-
Prototype à base de Polymorphisme
-
L'Héritage Polymorphisme
C'est le polymorphisme de la stratégie utilisée par java. Clojure l'appui de cette par procuration. Utile quand on fait de java interop.
-
Protocole
Protocole de clojure est comme TypeClass à Haskell.
-
Multimethod
Alors que les protocoles de fournir polymophic expédition basée sur le type du premier argument, multimethods sont beaucoup plus souple, ce qui peut l'expédition basée sur n'importe quelle fonction de la méthode de (tout) les arguments .
Polymorphism a la carte
signifie "choisir ce que l'polymorphisme de la stratégie de meilleur pour votre cas. Ils sont tous en vous boîte à outils".
Vous pouvez implémenter TypeClass
modèle en scala à l'aide implicites. Lire Scalaz source si vous voulez realworld exemples. Scala ne prend pas en charge multimethods au niveau de la langue, mais je suppose que c'est possible avec l'aide de la prochaine 2.10 macro.
Comme pour les avantages, les avancées polymophism stratégies telles que TypeClass et Multimethod peut aider à résoudre le Problème de l'Expression. "Le but est de définir un type de données par cas, où l'on peut ajouter de nouveaux cas pour le type de données et de nouvelles fonctions sur le type de données, sans avoir à recompiler le code existant, et tout en conservant le type statique de la sécurité (par exemple, pas de jette)".
Btw, cette question est trop grand pour tenir dans une seule stackoverflow question. Ma suggestion est de se familiariser avec ces notions, et puis vous allez comprendre leur utilité.