This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-12-29
Channels
- # beginners (29)
- # boot (17)
- # calva (1)
- # cider (31)
- # cljs-dev (3)
- # clojure (169)
- # clojure-europe (1)
- # clojure-france (1)
- # clojure-russia (40)
- # clojure-serbia (3)
- # clojure-uk (42)
- # clojurescript (19)
- # clr (3)
- # core-async (7)
- # core-typed (3)
- # cursive (43)
- # datascript (4)
- # datomic (2)
- # dirac (4)
- # emacs (2)
- # fulcro (85)
- # funcool (1)
- # nrepl (5)
- # off-topic (14)
- # shadow-cljs (28)
- # spacemacs (5)
- # tools-deps (2)
Разобрался я с валидацией. Все-таки спека это про форму данных, а не валидацию. И валидация может зависеть от разных внешних факторов. У меня вопрос поинтереснее:
{:publication/id 1
:publication/translations {:en {:publication.translation/title "article"
:article.translation/content "some content"}}
:article/image-url "http://..."}
Т.е. я хочу расширить вложенную мапу, но не могу этого сделать, т.к.
не могу переопределить :publication/translation и добавить туда :article.translation/content
.
Вариант решения я вижу только один - req-un
.
Может еще что-то есть?@kuzmin_m Это нельзя по определению. Если ты ссылаешься на :publication/translations
, то она может быть только одного вида.
Либо в :publication/translations
сделать дополнительный ключ опциональный, и где-то его требовать.
по факту article наследует от publication т.е. он может усиливать контракт, что я и хочу если бы я ослаблял контракт, выкидывая ключи, это да
для датомика с его фактами спека идеально подходит а если нужны вложенные мапы - боль и страдания
Спека плохо подходит для случая "а теперь мы напихаем всякую хрень в типы, на которые мы ссылаемся"
Ну вот есть тип :publication/translations
. Ты его определил, у него ключи, всё такое.
Можно расширить внутренний тип, а потом сослаться на расширенный в том месте, где надо.
Спека говорит "если ты употребил такой-то ключ, то этим ты сказал, что значение этого ключа имеет такой-то тип".
было бы забавно, если для доступа по ключу учитывалось наследование
(derive :b :a)
(:b {:a 1}) ;;=> 1
тогда можно было бы и спеки наследовать
но это на первый взгляд наркоманияЯ уже на это натыкался, когда хотел спекой покрыть чужую модель данных (там это вообще JSON).
Понял я свою ошибку. Нельзя так делать, как я хочу. Если у публикации есть публикация.перевод, и статья наследует публикации, то в интерфейсе статьи обязан быть публикация.перевод, а не статья.перевод.
Нет, можно так делать: https://repl.it/@darkleaf/inheritance
https://hardcode.fm/2018/12/29/episode007.html теперь с @nicola Этот выпуск специально для этого чатика - про Рича, conj и maybe not (лучше поздно, чем никогда) Особенно тем, кто не в телеге 🙂