假设我有这个原子作为游戏的状态:Clojure;如何迭代地图矢量,以便索引已知,以便能够更新地图?
(defonce state (atom {:player
{:cells [{:x 123 :y 456 :radius: 1.7 :area 10}
{:x 456 :y 789 :radius: 1.7 :area 10}
{...}]}}))
,我想读取其中细胞中的一个,(在地图:x和:y值在:细胞载体)与计算这些值应该在下一帧中,然后在计算时更新相应映射中的新:x和:y位置?
我有这个至今:
(let [cells (get-in @state [:player :cells])]
(reduce
(fn
[seq cell]
(let [cell-x (get-in cell [:x])
cell-y (get-in cell [:y])]
; do my calculations
; ...
))
nil
cells))
这样我就可以读出的值,做计算,但如何将我更新x和y位置与新的价值观?我可以使用:
(swap! state update-in [:player :cells ...] assoc :x new-x :y new-y)
但我不知道该指数...在向量来更新它
我假设有没有用减少的方式,会给我的索引。 ?
还是我接近这完全没有惯用?
你检查了幽灵吗?它有很好的支持,有点东西:https://github.com/nathanmarz/specter –