Size: a a a

Clojure — русскоговорящее сообщество

2021 September 02

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
вот эта строка вообще непонятна
(fn [[id val]] (= id (:db/id val)))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
можно пример данных и что ты хочеш проверить?
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
данные следующего вида:
{X {:db/id X}
Y {:db/id Y}}
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
где Х и Y условно какие-то айдишники
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
проверять нужно во-первых наличие и корректность :db/id внутри мап, в значении мапы с первого уровня
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
а так же предикатом то, что X == X, а Y == Y
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Кто-то знает как добавить все ридеры из clojure.core в clojure.edn, чтоб read-string работали одинаково?
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Пример
(read-string “#=(+ 1 2)”) => 3
(edn/read-string “{:foo #=(+ 1 2)}”) => error
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
тогда (fn [[id val]] (= id (:db/id val))) это неверный предикат
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
точнее, это предикат для конкретной пары, а нужно для всей мапы.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
можно завернуть его в (s/coll-of (fn ...))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
надо вмерджить в словарь переменную *data-readers*
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(edn/read-string "..." {:readers *data-readers*})
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Не работает, но я уже нашёл что надо копать в сторону dispatch-macros
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
надо было копировать) сейчас попробую вытащить, что у меня получилось
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
(s/def :db/id (s/or :long number? :string string?))
(s/def ::e (s/and (s/map-of :db/id (s/keys :req [:db/id]))
                (s/coll-of (fn [[id val]] (= id (:db/id val))))))

(clojure.pprint/pprint (s/explain-data ::e {1 {:db/id 1}}))

;; =>

#:clojure.spec.alpha{:problems
                    ({:path [],
                      :pred (fn [[id val]] (= id (:db/id val))),
                      :val [1 #:db{:id [:long 1]}],
                      :via [:tyrell.api.spec/e],
                      :in [0]}),
                    :spec :tyrell.api.spec/e,
                    :value {1 #:db{:id 1}}}
источник

AU

Alexander Ushanov in Clojure — русскоговорящее сообщество
собственно в val уже попадает не оригинальная мапа, а мапа с :db/id [:long 1], которая валидацию предикатом не проходит
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
а, так ведь #= это особый случай
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
значит надо поправить предикат
[[id [_ val]]]
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
т.е. вместо val => [_ val]
источник