习惯性的避免做零的方法?校验

时间:2016-09-03 07:14:32

标签: clojure

在此函数中,to-right可能为nil,在这种情况下函数应返回false:

(defn has-children? [loc]
  (let [to-right (zip/right loc)]
    (and to-right (-> to-right zip/node vector?))))

虽然上述工作正常,但我怀疑在to-rightnil时有一种更惯用的方法可以返回虚假,但是使用to-right进行进一步调查。

2 个答案:

答案 0 :(得分:6)

Clojure提供if-let作为...的快捷方式,iflet(以及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?))