Clojure:更新记录字段的值

2024-01-19

我已定义记录来存储用户详细信息和地址详细信息。

(defrecord User [id name address])

(defrecord Address [id location street city state])

(def usr (User. 1 "Abc"
           (Address. 1 "Location 1" "Street" "NY" "US")))

我已使用以下代码将“名称”更新为“BCD”

(assoc usr :name "BCD")

Output:

#async_tea_party.core.User{:id 1, :name "BCD", :address #async_tea_party.core.Address{:id 1, :location "Location 1", :street "Street", :city "NY", :state "US"}}

(usr)

OutPut:

#async_tea_party.core.User{:id 1, :name "Abc", :address #async_tea_party.core.Address{:id 1, :location "Location 1", :street "Street", :city "NY", :state "US"}}

新值name字段尚未更新,它仍然显示旧值。

如何永久更新“用户”记录中的“姓名”字段?


(def usr (User...))是一种一成不变的。你无法改变它。 当你这样做时(assoc usr :name "BCD")你没有改变它。你创建一个新的。为了做你想做的事,你需要一个原子。

(def usr (atom (User. 1 "Abc"
           (Address. 1 "Location 1" "Street" "NY" "US"))))

(:name @usr) ;; "Abc"
(swap! usr assoc :name "BCD")
(:name @usr) ;; "BCD"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure:更新记录字段的值 的相关文章

随机推荐

  • 异步函数完成后Python调用回调

    我试图在异步函数运行完成后调用回调 这是我想做的一个例子 import asyncio async def asyncfunction print Hello await asyncio sleep 10 print World retur
  • 为什么 Log4j2 JsonLayout + KeyValuePair 打印空的 logEvent 消息

    TL DR如果我在 log4j2 xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout 则生成的日志消息为空 有什么想法吗 很长的故事 我正在使用 Tomcat 8 5 43 以及以下与日志记录相关的 JAR Ja
  • 超级循环编译错误

    我之前写过关于运行问题的文章超级高铁 https stackoverflow com questions 34817022 cant run hyperloop project项目 如果运行一个新创建的项目来添加我从 Appcelerato
  • 是否可以在没有 Mac 的情况下制作适用于 iOS 的 PhoneGap 应用程序?

    所以我有一个 HTML 5 应用程序 并且可以访问 Apple 开发人员中心 更准确地说是 iOS 开发中心 问题是我可以在不购买 借用 Mac 的情况下实际使用它吗 也就是说 我可以从 Windows 或 Linux 创建 下载我的开发人
  • 获取 OCIError: ORA-00932: Rails 3 中的数据类型不一致

    这是场景 我正在为 Ruby On Rails 编写 geo ruby oracle 适配器 它支持开箱即用地使用 SDO GEOMETRY 进展顺利 我编写了从 Oracle DB 成功选择 SDO GEOMETRY 对象的代码 当我想编
  • 人类可读的条形码与条形码平行放置

    以下是根据传递的 Id 生成条形码的代码 条形码生成良好 Override public byte generateBarcodeForId String Id throws VisitMastException BarcodeUtil u
  • Scala - 打印数组

    Scala 似乎缺乏对打印数组的支持 如果你打印一个 你会得到 Java 中的默认垃圾 scala gt val array Array fill 2 2 0 array Array Array Int Array Array 0 0 Ar
  • java.util.ConcurrentModificationException问题

    在此代码中 我收到 java util ConcurrentModificationException 该方法位于 Web 服务中 首先读取文件并检查 vakNaam 是否在文件中 然后它将被删除并且文件将被重写 异常由 Exception
  • 用于具体实现抽象类的构建器(Joshua Bloch 风格)?

    假设我有一个抽象类 BaseThing 它有一个必需参数 基本必需 和一个可选参数 基本可选 我有一个扩展它的具体类 Thing 它还具有一个必需参数 必需 和一个可选参数 可选 所以像这样 public abstract class Ba
  • C# - 如何调用添加到项目解决方案中的exe

    所以我在我的项目解决方案中添加了一个 EXE EXE 执行一些操作并通过 stdout 输出数据 我想捕获输出 但更重要的是如何在程序中执行该 EXE Process p new Process p StartInfo UseShellEx
  • C++ 检查前 5 个或后 5 个元素是否等于某个值

    有没有一种简单的方法可以在没有 for 循环或大量 if 和 else 的情况下做到这一点 那么例如 for i 0 i
  • 用于java的DAO生成器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找免费且简单的 Java DAO 生成器 它需要从数据库表 视图创建实体 本并生成基本的 CRU
  • 将图像转换为灰度

    我想将任何图像转换为灰度 但我不明白这些实现之间的区别 image cv2 imread lenna jpg gray cv2 cvtColor image cv2 IMREAD GRAYSCALE gray1 rgb2gray image
  • 将 String 类型引用标记为 Volatile 安全吗?

    我读过一些帖子和文章说我们不应该将java对象声明为易失性的 因为这样一来 只有引用变得易失性 这里有些例子 link 1 https stackoverflow com questions 15487544 declaring an ob
  • 如何清除 Dr. Racket IDE 中的解释器屏幕?

    刚刚开始接触 The Little Schemer 有一个非常基本的 Dr Racket IDE 问题 如何清除口译员屏幕 如何设置向上箭头来显示之前输入的项目 如 Bash 中 而不是当前向上滚动屏幕的行为 我的搜索结果一片空白 可能是因
  • 如何根据键值更新 javascript 数组中的行?

    我有一个这样的数据数组 var nameInfo name Moroni age 50 name Tiancum age 43 name Jacob age 27 name Nephi age 29 name Enos age 34 如果我
  • 添加迁移给出的文件名已经存在

    我已经启用了这样的迁移 enable Migrations ProjectName ProjectOne ContextTypeName MyIdentity Config MyIdentityContext MigrationsDirec
  • 使用 awscli 更新 cloudfront 配置

    我想使用 awscli 编辑 更新我的 CloudFront 发行版 我正在使用最新的 cli 版本 aws cli 1 11 56 Python 2 7 10 Darwin 16 4 0 botocore 1 5 19 要在 awscli
  • 将图像转换为灰度

    有没有办法将图像转换为每像素 16 位灰度格式 而不是将每个 r g 和 b 分量设置为亮度 我目前有一个 bmp 文件 Bitmap c new Bitmap filename 我想要一个位图 d 即 c 的灰度版本 我确实看到一个包含
  • Clojure:更新记录字段的值

    我已定义记录来存储用户详细信息和地址详细信息 defrecord User id name address defrecord Address id location street city state def usr User 1 Abc