Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否在Clojure记录上创建可选字段?_Clojure - Fatal编程技术网

是否在Clojure记录上创建可选字段?

是否在Clojure记录上创建可选字段?,clojure,Clojure,当我实例化clojure记录时,如果我没有设置记录的所有字段,我会得到一个错误。如何将某些字段指定为可选字段?defrecord声明了一个类型和构造函数,但该类型实现了clojure映射接口。您只需要在声明中放入必需的字段。比如说, (defrecord MyRecord [required1 required2]) (defn make-my-record [r1 r2 & [opt1 opt2]] (assoc (MyRecord. r1 r2) :optional1 opt1

当我实例化clojure记录时,如果我没有设置记录的所有字段,我会得到一个错误。如何将某些字段指定为可选字段?

defrecord
声明了一个类型和构造函数,但该类型实现了clojure映射接口。您只需要在声明中放入必需的字段。比如说,

(defrecord MyRecord [required1 required2])

(defn make-my-record [r1 r2 & [opt1 opt2]]
  (assoc (MyRecord. r1 r2) :optional1 opt1 :optional2 opt2))
可以这样使用

user> (make-my-record 1 2)
#:user.MyRecord{:required1 1, :required2 2, :optional2 nil, :optional1 nil}
user> (make-my-record 1 2 :a :b)
#:user.MyRecord{:required1 1, :required2 2, :optional2 :b, :optional1 :a}