2012-10-31 7 views
32

Während defrecord die bevorzugte Form -für die allgemeine Fall- in Clojure zur Definition einer „Einheit“, in ClojureScript ist kann weit mehr Verweise auf deftype, die sich finden, wie in variousdocumentation.Deftype vs. defrecord

Was ist der Unterschied zwischen beiden Formen? Was sollte man bevorzugen?

Antwort

43

deftype erstellt ein leeres Objekt, das ein Protokoll implementiert.

defrecord erstellt eine unveränderliche persistente Karte, die ein Protokoll implementiert.

Welche zu verwenden hängt davon ab, was Sie wollen. Willst du eine vollständige ClojureScript-Datenstruktur? Dann benutze einen Datensatz. Willst du nur ein bloßes Ding, das nur ein Protokoll erfüllt? Dann benutze einen Typ.

Die zwei Bits der Dokumentation, auf die Sie verweisen, verwenden Typen, weil sie versuchen, Protokolle auf der grundlegendsten Ebene darzustellen, und Typen haben sozusagen weniger "weiter" als Datensätze.

Allerdings müssen die meisten realen Anwendungen von objektartigen Dingen in Clojure/ClojureScript Datenfelder zusammen mit dem Objekt speichern, und dafür sollten Sie einen Datensatz aus dem gleichen Grund verwenden, aus dem Sie einen verwenden sollten Clojures unveränderliche Sammlungen.

Verwandte Themen