constructor - 使用 defrecord 构造函数调用 apply?

标签 constructor clojure

core=> (defrecord Puffball [id name])
core.Puffball
core=> (Puffball. 149 "Urist")
#core.Puffball{:id 149, :name "Urist"}
core=> (apply Puffball. [149 "Urist"])
CompilerException java.lang.RuntimeException: java.lang.ClassNotFoundException: Puffball., compiling:(NO_SOURCE_PATH:3)
core=> (apply Puffball [149 "Urist"])
ClassCastException java.lang.Class cannot be cast to clojure.lang.IFn  clojure.core/apply (core.clj:600)

如何从矢量创建马勃球?

最佳答案

在 Clojure 1.3 中,记录定义自动引入工厂函数:

Clojure 1.3.0
user=> (defrecord Puffball [id name])
user.Puffball
user=> (apply ->Puffball [149 "Urist"])
#user.Puffball{:id 149, :name "Urist"}

->Puffball 是“位置”工厂函数;还有 map->Puffball,顾名思义。

关于constructor - 使用 defrecord 构造函数调用 apply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8876425/

相关文章:

vim - 邪恶的 Emacs 模式 : sentence motions and other questions

macros - clojure 列表?和宏

clojure - 运行独立 clojure REPL 的推荐方法是什么?

javascript - 为什么在 JavaScript 构造函数中使用副作用是不好的做法?

c++ - 尝试在类的构造函数中复制变量时出错

javascript - 检索原型(prototype)属性时出现类型错误

php - 如何让 PHP 类构造函数调用其父级的父级构造函数?

clojure - 如何在compojure中启用跨域请求?

performance - 忽略项的高效笛卡尔乘积算法

c++ - 为什么显式允许默认构造函数和具有 2 个或更多(非默认)参数的构造函数?