Clojure est defrecord - comment l'utiliser?

Je suis d'essayer de créer mon propre immuable type de données/méthodes avec defrecord en Clojure. Le but est d'avoir un type de données que je peux créer des instances d', puis d'appeler ses méthodes de retourner une nouvelle copie de lui-même avec muté variables. Dire que a et b sont des vecteurs. Je voudrais mettre à jour une valeur à la fois et de revenir une nouvelle copie de l'ensemble de la structure avec ces vecteurs mis à jour. De toute évidence, cela ne compile pas, je suis juste essayer de faire passer mes idées.

(defrecord MyType [a b]
  (constructor [N]
    ; I'd like to build an initial instance, creating a and b as vectors of length N
  ) 

  (mutate-and-return [] 
    ; I'd like to mutate (assoc the vectors) and return the new structure, a and b modified
  )
)

J'aimerais appeler le constructeur et ensuite le mutateur autant de fois que je le souhaiterais (il y en a d'autres fonctions qui ne sont pas muter, mais je ne veux pas rendre les choses plus complexes pour la question).

Alternativement, si ce n'est pas idiomatique Clojure, comment êtes-vous censé faire quelque chose comme cela?

  • Parfois, vous voulez un composant au lieu de ce que defrecord fournit. Just sayin
InformationsquelleAutor Eve Freeman | 2012-08-14