11
クロージャレコードをインスタンス化するときに、レコードのすべてのフィールドを設定しないとエラーが発生します。オプションのフィールドのいくつかを指定するにはどうすればよいですか?Clojureレコードにオプションフィールドを作成しますか?
クロージャレコードをインスタンス化するときに、レコードのすべてのフィールドを設定しないとエラーが発生します。オプションのフィールドのいくつかを指定するにはどうすればよいですか?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}