我想知道如何同时更新两个值.例如,我想同时增加月份和减少年龄.我的代码是
user=>(def users {:month 1 :age 26})
user=>(update-in users [:month :age] inc dec)
Run Code Online (Sandbox Code Playgroud)
我知道这种语法不正确,但我该如何解决这个问题呢?我需要同时更新.因为如果我先更新月份然后更新年龄,那么当我更新第二张地图时,第一张地图将丢失.还是有其他方法可以解决这个问题吗?
update不修改值,它只返回一个新值,所以它只是一个函数.如果您需要更新地图的2个字段,那么直接的方法就是调用update两次,首先是在原始地图上,然后是第一次更新的结果:
(defn update-month-and-age [user]
(update (update user :month inc) :age dec))
Run Code Online (Sandbox Code Playgroud)
哪个看起来更好使用->:
(defn update-month-and-age [user]
(-> user
(update :month inc)
(update :age dec)))
Run Code Online (Sandbox Code Playgroud)