小编And*_*nos的帖子

一次交换中的多个关联!操作例如。同时更新点的 x, y

我的问题是关于 clojure 原子中的嵌套映射/键以及如何同时更新它们。在我的情况下,我在另一个地图中有一个嵌套地图,它是一个持有小游戏原子的状态。

这是我的原子:

(def state (atom {:mousePos {:x 0 :y 0}
                  :playArea {:width 10000 :height 10000}
                  :player {:zoomOut 7.5
                           :cells [{:center {:x 1234 :y 5678}
                                    :radius 17.84124116
                                    :area 1000}]
                           :gravityCenter {:x 1234 :y 5678}
                           :gravityRadius 17.84124116}}))
Run Code Online (Sandbox Code Playgroud)

在这个原子中,我想同时更新 mousePos x 和 y 值以确保它们的一致性/并发性。

目前我正在做:

(swap! state assoc-in [:mousePos :x] mouseX)
(swap! state assoc-in [:mousePos :y] mouseY)
Run Code Online (Sandbox Code Playgroud)

但那些是两个交换!理论上如果线程之间切换我可能会遇到问题,对于另一个线程中的以下操作,我将使用当前的 x 但鼠标的旧 y 位置我不想要那个。

所以我希望做这样的事情:

(swap! state assoc-in [:mousePos :x] mouseX
                      [:mousePos :y] mouseY)
Run Code Online (Sandbox Code Playgroud)

女巫当然不会工作,所以我尝试编写自己的 assoc-in-mult 函数,这就是我不成功的地方。

state clojure

6
推荐指数
1
解决办法
672
查看次数

标签 统计

clojure ×1

state ×1