我是一个完全新手的clojure并试图基本上遵循一些教程.我有一个关于defrecords 的问题.
这是我要做的事情:
(defrecord somemap [key1 key2 key3 key4])
(defn give-me-map [m1 m2]
(somemap. m1 m2))
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我想拥有key3和key4作为可选,这样我每次创建一个somemap对象时都不需要给它们赋值.
还有一个类似的问题在这里,但它的什么,我想在这里做反向.
那么可以defrecord用可选字段定义吗?
使用时(defrecord T [...]),会创建两个工厂函数:->T和map->T.
第一个使用位置参数作为键.第二个将任意映射应用于记录.
您可以保留key3并key4在构造函数中使用map->somemap.
(defrecord somemap [key1 key2 key3 key4])
(defn give-me-map
[key1 key2]
(map->somemap {:key1 key1 :key2 key2}))
Run Code Online (Sandbox Code Playgroud)
由于Clojure中的记录实现了map接口,因此除构造函数中指定的字段外,所有字段都是可选的.
因此,只有声明你的记录key1,并key2是正确的:只有key1和key2将在构造函数中必需的,但你可以轻松地设置key3或key4(或其他任何按键,对于这个问题)由associng一个值,以他们在像任何其他地图的记录.