我经常这样写:
(if (nil? a-value) another-value a-value)
是否有更简单的功能,例如:
(if-nil? a-value another-value)
我经常这样写:
(if (nil? a-value) another-value a-value)
是否有更简单的功能,例如:
(if-nil? a-value another-value)
如果要使用默认值,则通常的习惯用法是使用or
宏:
(or foo default-value)
default-value
当foo
为假(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)))
为什么不简单地定义一个if-nil?
宏:
(defmacro if-nil? [expr body]
`(let [e# ~expr]
(if (nil? e#) ~body e#)))