如何将矢量转换为记录?

inl*_*ine 6 clojure

例如,如果我有:

(defrecord Item [name cost])
Run Code Online (Sandbox Code Playgroud)

我怎么能转换["ball" 10]{:name "ball", :cost 10}

Ale*_*yev 15

user=> (defrecord Item [name cost])
user=> (apply ->Item ["ball" 10])
#user.Item{:name "ball", :cost 10}
Run Code Online (Sandbox Code Playgroud)

简要解释发生了什么.(->Item "ball" 10)是从给定参数创建记录的语法之一.它是一样的(Item. "ball" 10).在你的情况下,你有参数的矢量,所以我们(apply fn args-vector)用来处理.

  • 根据@ArthurUlfeldt建​​议,"defrecord"文档中的相关引用可能会添加到答案中:"给定`(defrecord TypeName ...)`,将定义两个工厂函数:` - > TypeName`,取位置参数对于字段和`map-> TypeName`,将关键字映射到字段值." (3认同)