deftype vs. defrecord
defrecord
est la forme préférée-pour le cas général - dans Clojure pour définir une "entité", dans ClojureScript on peut trouver beaucoup plus de références à deftype
, comme indiqué dans divers documentation.
Quelle est la différence entre les deux formes? Qui doit-on préférer?
1 réponses
deftype
crée un objet sans os qui implémente un protocole.
defrecord
crée une carte persistante immuable qui implémente un protocole.
L'utilisation dépend de ce que vous voulez. Vous voulez une structure complète de données en ClojureScript? Ensuite, utilisez un disque. Tu veux juste un truc simple qui ne fait que satisfaire un protocole? Alors utilise un type.
les deux bits de documentation auxquels vous faites référence utilisent des types parce qu'ils essayent d'illustrer les protocoles au niveau le plus élémentaire, et les types ont moins "en cours" que les enregistrements, pour ainsi dire.
cependant, la plupart des utilisations réelles de choses semblables à des objets dans Clojure/ClojureScript ont besoin de stocker des champs de données avec l'objet, et pour cela vous devez utiliser avec emphase un enregistrement, pour la même raison vous devez utiliser n'importe laquelle des collections immuables de Clojure.