Fork me on GitHub
#clojure-russia
<
2018-03-11
>
achikin11:03:01

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

achikin11:03:20

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

achikin12:03:38

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

dottedmag12:03:19

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

dottedmag12:03:02

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

dottedmag12:03:23

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

y.khmelevskii16:03:08

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

dottedmag16:03:43

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

y.khmelevskii17:03:16

@dottedmag у меня в компонент передается реагентовский атом, например open?. Компонент покрыт спекой и валидируеться через instrument. Получается, что я пропсу open? не могу провалидировать?

dottedmag17:03:43

Атом — нет. Содержимое — да. Но на содержимое тогда нужна отдельная спека.

y.khmelevskii17:03:27

а можно пример как содержимое атома покрыть?

dottedmag17:03:46

Если булевый тип, то просто bool? ?

misha18:03:33

ну ты же атом на булин проверяешь kappa

y.khmelevskii18:03:25

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

misha18:03:50

#(instance? clojure.lang.IAtom %)

misha18:03:13

(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

igrishaev18:03:31

Спека — это комбо из предикатов. Поэтому можно проверить, что это атом, и внутри него бул. Технически это возможно, но неверно с точки зрения дизайна.

misha18:03:37

покрывать реакт компоненты спекой - как-то попахивает

dottedmag18:03:42

если у компонента есть состояние, то почему бы и нет?

misha18:03:03

я бы выносил логику, и её и покрывал.

y.khmelevskii19:03:59

@misha спасибо, это то, что нужно. По поводу попахивания: мне кажется удобно описать пропсы компонента, особенно если у компонента есть пропсы массивы/объекты/перечисляемые типы. Такое себе документирование компонента. И да, это у меня из-за того что я много использовал реактовские PropTypes, и как-то привык.