Où dois-je utiliser defrecord en clojure?
J'ai utiliser beaucoup de cartes et les structures dans ma clojure programmes. Quels sont les avantages (en dehors de la performance) de la conversion de ces defrecords?
Vous devez vous connecter pour publier un commentaire.
Je considère que les structures puissent être effectivement obsolète, donc je ne pas les utiliser du tout.
Quand j'ai un ensemble fixe de bien-connu clés utilisées dans de nombreux map cas, j'ai l'habitude de créer un enregistrement. Les gros avantages sont:
Quelques inconvénients de dossiers:
defstruct
. Voir lispworks.com/documentation/HyperSpec/Body/....Stuart Sierra a récemment écrit un article intéressant sur "la Résolution de l'Expression Problème avec Clojure 1.2", qui contient également une section sur
defrecord
:http://www.ibm.com/developerworks/java/library/j-clojure-protocols/index.html#datatypes
Je pense que l'ensemble de l'article est un bon point de départ pour comprendre les protocoles et les enregistrements.
Un autre avantage majeur est que le dossier a un type (sa classe), vous pouvez expédier hors de.
Un exemple qui utilise cette fonctionnalité, mais n'est pas représentatif de l'ensemble des utilisations possibles est la suivante:
Utiliser des cartes dans la plupart des cas et n'enregistre que si vous avez besoin de polymorphisme. Avec des cartes seul, vous pouvez toujours utiliser multimethods; cependant, vous avez besoin de pièces si vous voulez des protocoles. Compte tenu de cela, attendre jusqu'à ce que vous avez besoin de protocoles avant de recourir à des enregistrements. Jusqu'alors, les éviter en faveur des plus centrée sur les données et de simplifier le code.
En plus de ce qui a été mentionné précédemment, en plus d'être généralement à la valeur nominale ou supérieur en termes de performances, et en exposant la même interface de programmation d'une carte, d'enregistrements, de faire appliquer une légère structure: les noms de clé et le nombre de clés sont appliquées au moment de la définition. Cela peut être utile en évitant les erreurs stupides où la même structure qui est attendu de nombreuses valeurs (ou juste artificiellement rigide contraire).
Quelles que soient les motivations originales, cette propriété de trop, elle se distingue de cartes.