Clojure 使用可选键取消录制
我对clojure完全是一个新手,基本上是在学习一些教程。我有一个关于Clojure 使用可选键取消录制,clojure,Clojure,我对clojure完全是一个新手,基本上是在学习一些教程。我有一个关于defrecords的问题 以下是我正在尝试做的事情: (defrecord somemap [key1 key2 key3 key4]) (defn give-me-map [m1 m2] (somemap. m1 m2)) 在上面的代码中,我希望将key3和key4作为可选项,这样我就不需要在每次创建somemap对象时给它们赋值 有一个类似的问题,但它与我在这里试图做的相反 那么,是否可以使用可选字段定义defr
defrecord
s的问题
以下是我正在尝试做的事情:
(defrecord somemap [key1 key2 key3 key4])
(defn give-me-map [m1 m2]
(somemap. m1 m2))
在上面的代码中,我希望将key3
和key4
作为可选项,这样我就不需要在每次创建somemap
对象时给它们赋值
有一个类似的问题,但它与我在这里试图做的相反
那么,是否可以使用可选字段定义
defrecord
由于Clojure中的记录实现了映射接口,因此除了构造函数中指定的字段之外,所有字段都是可选的
因此,仅使用key1
和key2
声明您的记录是正确的:构造函数中只需要key1
和key2
,但您可以轻松设置key3
或key4
(或任何其他键)通过像任何其他映射一样将值关联到记录上。当您使用(defrecord T[…])
时,将创建两个工厂函数:->T
和映射->T
第一种方法将位置参数用作关键点。第二种方法将任意映射应用于记录
您可以在构造函数中保留key3
和key4
,并使用map->somemap
(defrecord somemap [key1 key2 key3 key4])
(defn give-me-map
[key1 key2]
(map->somemap {:key1 key1 :key2 key2}))
如果你是clojure的新手,你可能想跳过defrecord,现在它是表兄弟。如果没有它们,您可以编写很多有用的代码。我对记录的理解是,在使用map->constructor时,所有键都是可选的。例如,参见:```(defRecordBar[abc])(defR(map->Bar{:c30}))#我的N.Bar{:a nil,:b nil,:c 30}```