【发布时间】:2021-11-08 04:14:11
【问题描述】:
我有这个记录:
(defrecord Point [x y z])
(def location (Point. 1 2 3))
现在我想基于location 创建一个新变量new-location,但z 坐标已更改。我知道我可以手动复制所有字段,即(def new-location (Point. (:x location) (:y location) 99)),但是有没有更简单的方法来在功能上只更新 Clojure 记录的几个字段?
请注意,我正在寻找一个不可变的解决方案。 Clojure: Update value of record field 是关于突变的,因此不回答我的问题。
【问题讨论】:
-
我认为
assoc可以用于记录和地图。 -
@ShannonSeverance 谢谢。也许您可以将其写为答案。
(def new-location (assoc location :z 99))解决问题。 -
我不会尝试用手机写答案,也不会很快使用电脑。但艾伦提供了一个很好的答案。
标签: clojure