Такая задачка вчера всплыла.
В case можно передавать листы вот таким образом
Теперь предположим у нас есть вектор из этих c,d,e
. Как пропихнуть этот вектор в case вместо листа?
@achikin The test-constants are not evaluated. They must be compile-time literals, and need not be quoted.
Так что можно сделать макро, которое заменит вектор на список, если сильно хочется.
Если значения не константы, то вместо case
нужно использовать cond
.
@dottedmag спасибо!
приветствую! подскажите как спекой описать атом, который содержит булевый тип?
Спекой атом не описать. Спекой описываются данные, а не места для данных.
@dottedmag у меня в компонент передается реагентовский атом, например open?
. Компонент покрыт спекой и валидируеться через instrument
. Получается, что я пропсу open?
не могу провалидировать?
Атом — нет. Содержимое — да. Но на содержимое тогда нужна отдельная спека.
а можно пример как содержимое атома покрыть?
Если булевый тип, то просто bool?
?
вот так
(s/def ::open? boolean?)
выдает ошибку https://www.dropbox.com/s/4ccir98okcisk3o/Screenshot%202018-03-11%2019.58.17.png?dl=0ну ты же атом на булин проверяешь :kappa:
да я понимаю, я не понимаю как это переписать. спеку пересмотрел, погугл - не помогло. пришел сюда
https://stackoverflow.com/questions/37972074/how-to-clojure-spec-a-reference-type-like-atom
#(instance? clojure.lang.IAtom %)
(s/def ::a (s/and
#(instance? clojure.lang.IAtom %)
#(boolean? @%)))
(s/explain ::a (atom true))
Success!
(s/explain ::a true)
val: true fails spec: ::a predicate: (instance? clojure.lang.IAtom %)
=> nil
(s/explain ::a (atom 1))
val: #object[clojure.lang.Atom 0x335eae96 {:status :ready, :val 1}] fails spec: ::a predicate: (boolean? (deref %))
=> nil
Спека — это комбо из предикатов. Поэтому можно проверить, что это атом, и внутри него бул. Технически это возможно, но неверно с точки зрения дизайна.
покрывать реакт компоненты спекой - как-то попахивает
если у компонента есть состояние, то почему бы и нет?
я бы выносил логику, и её и покрывал.
@misha спасибо, это то, что нужно. По поводу попахивания: мне кажется удобно описать пропсы компонента, особенно если у компонента есть пропсы массивы/объекты/перечисляемые типы. Такое себе документирование компонента. И да, это у меня из-за того что я много использовал реактовские PropTypes, и как-то привык.