Создать необязательные поля в записи Clojure? - PullRequest
11 голосов
/ 03 января 2011

Когда я создаю запись clojure, я получаю сообщение об ошибке, если я не устанавливаю все поля записи. Как я могу указать некоторые поля, которые будут необязательными?

1 Ответ

11 голосов
/ 03 января 2011

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...