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. トランザクションを作成できません[Springブート+休止状態]
- 5. VMを作成できません。バゲントVMの「パワーオフ」状態。
- 6. Clojureレコードにオプションフィールドを作成しますか?
- 7. 状態パラメータを変更し、状態をリロードしません。実現可能か?
- 8. redux-thunkアクション作成者からの状態変更を聞きます
- 9. 休止状態でシーケンスIDを作成
- 10. 州の状態から状態を解決できません
- 11. タスクデータフロー、データブロックを完了状態から変更できますか?
- 12. 状態変更メソッド(TypeError)で状態オブジェクトのオブジェクトプロパティにアクセスできません
- 13. スイッチケースを三元状態に変換できますか?
- 14. Androidのボタンやチェックボックスの状態を変更できますか?
- 15. forループ内で2つのアレイを形成して点火状態の変化状態を確認する
- 16. バックグラウンドの状態リスト描画可能XMLを作成する - Android
- 17. 親状態の変更時に子作業項目の状態が自動的に変更できるか
- 18. Reactコンポーネントで状態を管理するには、親からの状態やイベントからの状態を変更することができますか?
- 19. 状態ドロップダウンリストの作成
- 20. Clojureでマップエントリを作成します
- 21. 休止状態で1対多のマッピングテーブルを作成できません
- 22. 状態を変更するイメージを作成する方法は?
- 23. 状態変更jqueryがangularjsで作業を停止します
- 24. KnockoutjsのViewModels間で可変状態を共有する
- 25. TFS - 作業項目 - すべての遷移を作成することなく、他の状態から状態を設定できますか?
- 26. 状態図を作成するドラッグ/ドロップ
- 27. テーマ+ダイナミックコントロールの作成+不可視のUserControl =ビューの状態エラー?
- 28. 優先状態「stable」内でpear/Archive_Zipをダウンロードできませんでしたか?
- 29. 状態変数の定数コピーを作成する
- 30. Meteorアプリケーションのサーバー状態とユーザー、状態の作成方法は?
alterとupdate-inはどちらも理解できない引数を自動的に渡します。したがって、これは '(change score update-in [player] + amount)'としてより簡潔に(より読みやすく)書くことができます。 – amalloy
@amalloy - ありがとう!新しいトリックを学ぶのは良いです:-)更新しました – mikera