4ZM*_*4ZM 3 design-patterns functional-programming clojure
我有一个游戏状态表示为地图和一些逻辑,在每个游戏'tic'上更新状态.但我无法弄清楚如何以任何理智的方式构建更新功能.
构造这样的函数的惯用模式是什么?
这是我想要做的一些伪代码:
(defn tic [g] "Return an updated game"
g1 = (update-in g [:day] inc)
g2 = (if (some-cond) (some-update-func g1) g1)
g3 = (update-in g2 [:fu] fu-update)
... many more ...
g-last)
Run Code Online (Sandbox Code Playgroud)
我并不真正关心中间状态,但使用 - >宏不起作用(因为有一些条件).
有效的黑客正在使用重置的本地原子!对于更新功能中的每个"行".但这不可能是它应该如何完成的?!
我建议在一个名称很好的函数中提取每个步骤,这样你就可以使用 - >.伪代码:
(defn tic [g]
(-> g
inc-day
random-weather
grow-trees
...))
Run Code Online (Sandbox Code Playgroud)
对于任何条件逻辑,您可以执行与您在g2步骤中执行的操作类似的操作.
也许你会发现synthread lib很有用.我发现这个视频很有启发性.
再看看cond->看看你怎么能混合 - >和一些cond.例如,您的cond可能如下所示:
(cond-> g
true (update-in [:day] inc)
(some-cond) some-update-fund
true (update-in [:fu] fu-update))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |