我想以道歉开头,尽管我使用Stackoverflow A LOT,但我完全是自强不息,这是我的第一个问题。
我想根据some
函数的结果做出决定...
(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
应该对此进行评估?
答案 0 :(得分:1)
在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,activeboard不包含在otherboard中:
(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
答案 1 :(得分:1)
首先,代码缩进可以大大帮助您理解自己的代码。我对您的问题进行了修改,使其至少更加清晰。
第二,考虑使用线程优先运算符(->
)或get-in
浏览地图中的多个级别。但这仅仅是代码风格的事情。
您的状况看起来还不错,就像@jas已经证明的那样。可能会惹上您麻烦的是,您没有提供通往if
的“其他”路径。 if
宏需要三个“参数”:条件,“ then”块和“ else”块。如果您只想测试情况的真实情况,请使用when
。
希望有帮助。