у меня есть следующие функции:Использование Clojure Spec с Datomic лицами
(s/def :person/age number?)
(s/def :person/name string?)
(s/def ::person (s/keys :req [:person/name :person/age]))
Тогда я получить сущность из Datomic:
(def person-entity (d/entity (d/db conn) [:person/name "Mr entity"]))
Если я пытаюсь проверить соответствие с спецификацией он терпит неудачу, потому что Объекты не являются картами:
(s/explain ::person person-entity)
val: #:db{:id 17592186069950} fails spec: :some-ns/person predicate: map?
Приложение имеет функции, которые принимают сущности как аргументы и хотели бы использовать идентификатор, который должен постоянно судить сущности на картах, только чтобы получить специальное оборудование для разработки.
Как следует проверять объекты через спецификацию?
Хороший вопрос. После того, как вы найдете решение этой проблемы, вы также не столкнетесь с проблемой с пространствами имен? Карту сущности будет что-то типа: '{: person/name" Mr. Entity "}', который делает _not_ validate против '(s/keys: req [:: name :: age])', если эти определения не будут в '(ns person)'. Но это заставляет вас определить кучу пространств имен пакетов верхнего уровня, что не кажется разумным. – Marc
Спасибо @Marc, я обновил этот пример. – Odinodin