Sto prendendo in considerazione l'utilizzo di record Clojure per mappare le entità che cambiano nel mio programma. Sono mutabili? O hai bisogno di usare riferimenti extra all'interno dei record? Sono un po 'confuso su questoPosso creare uno stato mutabile nei record Clojure?
9
A
risposta
12
Vale la pena guardare Rich Hickey's fantastic video on identity and state.
I record sono progettati per essere immutabili e memorizzare lo stato di qualcosa come valore.
Per modellare lo stato di un'entità che cambia, si consiglia di utilizzare un riferimento che si riferisce a un valore immutabile che rappresenta lo stato corrente. Puoi usare i record per lo stato immutabile, ma spesso è più semplice usare una mappa semplice.
Un semplice esempio, dove lo stato mutabile è un quadro di valutazione per un gioco:
; set up map of current scores for each player
(def scores
(ref
{:mary 0
:joe 0 }))
; create a function that increments scores as a side effect
(defn add-score [player amount]
(dosync
(alter scores update-in [player] + amount)))
; add some scores
(add-score :mary (rand-int 10))
(add-score :joe (rand-int 10))
; read the scores
@scores
=> {:mary 6, :joe 1}
5
ho scoperto che ho molto più comunemente put record in arbitri di arbitri nei record. il consiglio di mikira di usare una mappa semplice suona molto bene.
Inizia con una mappa e passa a qualcosa di meno flessibile quando è necessario.
Problemi correlati
- 1. Documentazione di record in clojure
- 2. In Clojure come posso implementare interfacce di raccolta Clojure standard sui miei record e tipi?
- 3. Come creare un membro puntatore-mutabile?
- 4. Corrispondenza del modello sui record in Clojure
- 5. Come posso creare uno script di configurazione?
- 6. Come si sposta lo stato mutabile in una chiusura?
- 7. Casi d'uso per Clojure nei progetti
- 8. Mappe e record di uguaglianza in Clojure
- 9. Unione di due/tre record nei binari
- 10. È possibile creare uno stato personalizzato da utilizzare in StateListDrawable?
- 11. Reame: l'ordine dei record è stato modificato
- 12. Come posso scrivere un server multi-client che non ha lo stato mutabile?
- 13. Trovare lacune (record mancanti) nei record del database utilizzando SQL
- 14. Conflitti di nomi nei record Haskell
- 15. Posso usare Clojure con nginx?
- 16. Come posso creare molte relazioni uno usando Scaffold?
- 17. Come posso utilizzare uno script per creare utenti in mongodb?
- 18. Perché devo creare una copia mutabile di questo array?
- 19. Delphi - Informazioni RTTI sui metodi nei record
- 20. Spark: ordina i record nei gruppi?
- 21. Come posso accedere a uno stato di hover in reactjs?
- 22. Come posso evitare uno stato booleano impossibile in C#?
- 23. Stato nei Digrafi di Erlang
- 24. Come posso creare uno scroll virtuale con angularJS?
- 25. JS - window.history - Elimina uno stato
- 26. Evitare lo stato globale nel livello DAO di un'applicazione Clojure
- 27. pretty-printing un record utilizzando un metodo personalizzato in Clojure
- 28. È buona norma per un record Clojure implementare IFn?
- 29. Coda priorità mutabile simultanea
- 30. Rails ActiveRecord: blocco degli attributi quando il record entra in uno stato particolare
Sia alter che update-in passano automaticamente tutti gli argomenti che non capiscono, quindi questo può essere più conciso (e in modo più leggibile) scritto come '(altera punteggi aggiornamento-in [giocatore] + importo)'. – amalloy
@amalloy - grazie! buono per imparare un nuovo trucco :-) hanno aggiornato – mikera