2

我经常这样写:

(if (nil? a-value) another-value a-value)

是否有更简单的功能,例如:

(if-nil? a-value another-value)
4

2 回答 2

4

如果要使用默认值,则通常的习惯用法是使用or宏:

(or foo default-value)

default-valuefoo为假(nil 或假)或foo当enerfoo为真(即除 之外的任何非零值)时,哪个将返回false

您通常也可以if-not在这种情况下使用,因为 nil 被认为是错误的。当然,您需要注意实际false值,因为这些值将被视为与 nil 相同。

作为最后的选择,您始终可以使用宏来准确获取if-nil?您正在寻找的行为:

(defmacro if-nil? 
  ([a b] (if-nil? a b nil))
  ([a b c]
    `(if (nil? ~a) ~b ~c)))
于 2012-11-05T06:01:02.790 回答
2

为什么不简单地定义一个if-nil?宏:

(defmacro if-nil? [expr body] 
  `(let [e# ~expr] 
    (if (nil? e#) ~body e#)))
于 2012-11-05T05:46:36.173 回答