clojure-russia 2018-03-11

Такая задачка вчера всплыла.

В case можно передавать листы вот таким образом

Теперь предположим у нас есть вектор из этих c,d,e. Как пропихнуть этот вектор в case вместо листа?

@achikin The test-constants are not evaluated. They must be compile-time literals, and need not be quoted.

Так что можно сделать макро, которое заменит вектор на список, если сильно хочется.

👍 1

Если значения не константы, то вместо case нужно использовать cond.

👍 1

приветствую! подскажите как спекой описать атом, который содержит булевый тип?

Спекой атом не описать. Спекой описываются данные, а не места для данных.

@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

да я понимаю, я не понимаю как это переписать. спеку пересмотрел, погугл - не помогло. пришел сюда

#(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, и как-то привык.