Clojure - если основано на каком-то результате - PullRequest
0 голосов
/ 25 января 2019

Я хочу начать этот пост с извинений, я полностью самообучен, и это мой первый вопрос, хотя я использую Stackoverflow A LOT.

Я хочу принять решение на основе результатаsome function ...

(if (= nil (some (partial = (:activeboard (:boards app)))
                 (:otherboards (:boards app))))
  (om/transact! (:boards app) :activeboard (fn [_] active)))

Я знаю, что тест some работает, так как у меня есть та же самая функция some ниже для вывода результата на экран.Но тест if этого не делает.Я так же попробовал case и condp.Ничто, кажется, не оценивает функцию some.Результатом функции some является либо nil, либо true, поэтому if должен оценить, что ??

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Во-первых, отступ кода может помочь вам понять ваш собственный код.Я отредактировал ваш вопрос, чтобы он был хотя бы немного более понятным.

Во-вторых, рассмотрите возможность использования оператора первого потока (->) или get-in для навигации по нескольким уровням на карте.Но это всего лишь стиль кода.

Ваше состояние выглядит хорошо, как уже продемонстрировал @jas.Что может привести к неприятностям, так это то, что вы не предоставите «другой» путь к вашему if.Макрос if ожидает три «параметра»: условие, блок «then» и блок «else».Если вы хотите проверить только истинный случай вашего состояния, используйте when.

Надеюсь, что это помогло.

0 голосов
/ 25 января 2019

Нет ничего особенного в оценке some в пределах if, и, насколько я могу судить, ваш код в порядке.Посмотрите ниже и посмотрите, можете ли вы создать нечто подобное (что мы все можем попробовать запустить сами), и это демонстрирует проблему.

Случай 1, активная доска включена в другую доску:

(def app {:boards {:activeboard 1 :otherboards [1 2 3]}})

(if (= nil (some (partial = (:activeboard (:boards app))) (:otherboards (:boards app))))
  (println "some returned nil")
  (println "some did not return nil"))

оценено:

>> some did not return nil

Случай 2, активная доска не включена в другую доску:

(def app {:boards {:activeboard 1 :otherboards [2 3 4]}})

(if (= nil (some (partial = (:activeboard (:boards app))) (:otherboards (:boards app))))
  (println "some returned nil")
  (println "some did not return nil"))

оценена:

>> some returned nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...