Sie können Polymorphismus à la carte als Polymorphismus nach Bedarf verwenden .
Die Clojure-Community ist stolz auf den Begriff Polymorphismus à la carte, da Clojure mehrere Polymorphismusstrategien unterstützt. Einige von ihnen sind:
Prototypbasierter Polymorphismus
Vererbungspolymorphismus
Dies ist die von Java verwendete Polymorphismusstrategie. Clojure unterstützt dies durch Proxy. Nützlich bei Java Interop.
Protokoll
Das Protokoll zu Clojure ist als TypeClass zu Haskell.
Multimethode
Während Protokolle einen polymorphen Versand basierend auf dem Typ des ersten Arguments bereitstellen, sind Multimethoden viel flexibler, die basierend auf einer beliebigen Funktion der (beliebigen) Argumente der Methode versenden können.
Polymorphismus à la carte bedeutet "Wählen Sie die für Ihren Fall am besten geeignete Polymorphismusstrategie aus. Sie befinden sich alle in Ihrer Toolbox."
Sie können TypeClass
Muster in Scala mithilfe von Implikits implementieren . Lesen Sie die Scalaz-Quelle, wenn Sie Beispiele aus der Praxis wünschen. Scala unterstützt keine Multimethoden auf Sprachebene, aber ich denke, dies ist mit Hilfe des kommenden 2.10-Makros möglich.
In Bezug auf die Vorteile können fortschrittliche Polymorphismusstrategien wie TypeClass und Multimethod zur Lösung des Ausdrucksproblems beitragen .
"Das Ziel besteht darin, einen Datentyp nach Fällen zu definieren, in denen dem Datentyp neue Fälle und neue Funktionen über den Datentyp hinzugefügt werden können, ohne dass vorhandener Code neu kompiliert werden muss, während die Sicherheit des statischen Typs erhalten bleibt (z. B. keine Umwandlungen)."
Übrigens ist diese Frage zu groß, um in eine einzelne StackOverflow-Frage zu passen. Mein Vorschlag ist, sich mit diesen Konzepten vertraut zu machen, und dann werden Sie ihre Nützlichkeit verstehen.
read
, und der Typ, von dem der Rückgabewert erwartet wird, bestimmt, welche Instanz verwendet wird).