Kur*_*out 7 clojure clojureclr
显然,你不能使用记录构造函数调用apply:
(defrecord Foo. [id field])
(apply Foo. my-list)
Run Code Online (Sandbox Code Playgroud)
在读取时失败,因为它不期待Foo.在那个地方.
我能想到的唯一明显的解决方法是添加工厂功能:
(make-foo [id field] (Foo. id field))
Run Code Online (Sandbox Code Playgroud)
当然可以申请.
我错过了什么吗?我希望这可以来自C#/ Java,但只是觉得它在Clojure中有点令人失望......
Ale*_*ler 10
绕回这个帖子1.3 ......
在Clojure 1.3中,defrecord创建了两个生成的构造函数.鉴于:
(defrecord Person [first last])
Run Code Online (Sandbox Code Playgroud)
这将创建一个位置构造函数->Person:
(->Person "alex" "miller")
Run Code Online (Sandbox Code Playgroud)
和地图构造函数map->Person:
(map->Person {:first "string"})
Run Code Online (Sandbox Code Playgroud)
因为这是一个映射,所有键都是可选的,并在构造的对象中采用nil值.
您应该在声明记录的ns中要求/使用这些函数,但不需要像使用Java类构造函数那样导入记录类.
更多细节: