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?

31
demandé sur Community 2012-10-31 06:46:53

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.

43
répondu levand 2012-10-31 20:40:02