Как заполнить запись Clojure с карты?

Есть ли что-то вроде struct-map для записей? Если нет, следует ли использовать структуру (документы препятствуют использованию структур)?

Может, я делаю не то, что полностью? У меня довольно сложная функция, которая в настоящее время берет карту опций. Я пытаюсь уточнить, какие значения параметров приемлемы/использованы (заменив его записью). И теперь я хочу связать это с кодом, который имеет эту информацию на картах (и которые содержат надмножество данных в записи).

Ответ 1

Не рекомендуется использовать записи просто для "документации" - простые старые карты более гибкие, простые и простые. Для документации вы можете просто добавить docstring или комментарий или создать функцию типа (defn make-whatever [thing1 thing2]).

Если вы все еще хотите запись, у вас есть несколько вариантов в зависимости от того, используете ли вы clojure версию 1.3 или новее. Если это так, (defrecord Whatever ...) также определяет функцию map->Whatever и функцию ->Whatever, которая принимает позиционные аргументы. Если нет, вы можете написать (into (Whatever. nil nil nil) some-map) (передавая правильное число nils для типа записи).