Clojureレコードを使用して、プログラム内のエンティティを変更することを検討しています。彼らは変更可能ですか?または、レコード内で追加の参照を使用する必要がありますか?私はこれについてちょっと混乱していますClojureレコード内で可変状態を作成できますか?
9
A
答えて
12
それはよく見て価値があるRich Hickey's fantastic video on identity and stateです。
レコードは、不変となるように設計されており、値の状態を格納します。
変化するエンティティの状態をモデル化するには、現在の状態を表す不変値を参照するrefを使用することをお勧めします。不変状態のレコードを使用することもできますが、単純なマップを使用するだけの方が簡単です。
可変状態がゲームのためのスコアボードで簡単な例、:
; 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
私は私がはるかに一般的に記録で参照文献より引用文献のレコードを入れて発見しました。 mikiraのアドバイスはシンプルなマップを使うのがとても良いです。
地図から始め、必要なときに柔軟性の低いものに切り替えます。
関連する問題
- 1. レコードで作業するClojure
- 2. 問題の理解:Clojureでの状態
- 3. 可変スコープシングルトンの可能な競合状態ですか?
- 4. タスクデータフロー、データブロックを完了状態から変更できますか?
- 5. Clojureレコードにオプションフィールドを作成しますか?
- 6. バックグラウンドの状態リスト描画可能XMLを作成する - Android
- 7. 親状態の変更時に子作業項目の状態が自動的に変更できるか
- 8. 状態ドロップダウンリストの作成
- 9. Reactコンポーネントで状態を管理するには、親からの状態やイベントからの状態を変更することができますか?
- 10. 状態を変更するイメージを作成する方法は?
- 11. 状態図を作成するドラッグ/ドロップ
- 12. TFS - 作業項目 - すべての遷移を作成することなく、他の状態から状態を設定できますか?
- 13. Meteorアプリケーションのサーバー状態とユーザー、状態の作成方法は?
- 14. 条件付き状態変更を伴う状態パターン
- 15. 優先状態「stable」内でpear/Archive_Zipをダウンロードできませんでしたか?
- 16. Redux ReactはAPIから初期状態を作成します
- 17. デフォルト状態のストロークで透明なリップル描画可能作成方法
- 18. ReactReduxで一時的な状態を作成する方法は?
- 19. .NETコンソールアプリケーションでHttpApplication状態を使用できますか?
- 20. Javabeansを休止状態で使用できますか?
- 21. clojureにsitemap.xmlを作成しますか?
- 22. バッテリー状態の変化でブロードキャストを受信できませんか?
- 23. 3状態マルコフ連鎖プロットの作成
- 24. エラー状態でJavaScriptプログラムの動作を停止しますか?
- 25. プラグ可能なセッション状態プロバイダを作成するにはどうすればいいですか
- 26. カンカン許可子状態
- 27. ドラッグ可能、サイズ変更可能、HTML、状態保存
- 28. AS3でマウスの状態を変更
- 29. ステートマシン:外部イベントなしで状態を変更する方法(過渡状態)?
- 30. エンティティの状態を変更します。
alterとupdate-inはどちらも理解できない引数を自動的に渡します。したがって、これは '(change score update-in [player] + amount)'としてより簡潔に(より読みやすく)書くことができます。 – amalloy
@amalloy - ありがとう!新しいトリックを学ぶのは良いです:-)更新しました – mikera