在此函数中,to-right
可能为nil,在这种情况下函数应返回false:
(defn has-children? [loc]
(let [to-right (zip/right loc)]
(and to-right (-> to-right zip/node vector?))))
虽然上述工作正常,但我怀疑在to-right
为nil
时有一种更惯用的方法可以返回虚假,但是使用to-right
进行进一步调查。
答案 0 :(得分:6)
Clojure提供if-let
作为...的快捷方式,if
和let
(以及when-let
如果你的当时分支有多个表格)< / p>
如果你想使用它,还有一个else子句。否则,您将获得nil
作为其他内容。
(if-let [t nil] t)
nil
(if-let [t 1] t)
1
(if-let [t nil] t 0)
0
(when-let [t 3]
(println t)
(println (* 3 t))
3
9
答案 1 :(得分:6)
由于您计划始终进行线程,因此可以使用some->
。 E.g。
(defn has-children? [loc]
(some-> (zip/right loc) zip/node vector?))