我经常写如下:
(if (nil? a-value) another-value a-value)
是否有更简单的功能,如:
(if-nil? a-value another-value)
答案 0 :(得分:4)
如果你想使用默认值,那么通常的习惯用法是使用or
宏:
(or foo default-value)
当default-value
为假(nil或false)或foo
whenener foo
真实时(即除{{1}之外的任何非零值),将返回foo
}})。
在这种情况下,您通常也可以使用if-not
,因为nil被认为是错误的。当然,您需要注意实际的false
值,因为这些值将被视为与nil相同。
作为最后一个选项,您始终可以使用宏来准确获取您要查找的false
行为:
if-nil?
答案 1 :(得分:2)
为什么不简单地定义一个if-nil?
宏:
(defmacro if-nil? [expr body]
`(let [e# ~expr]
(if (nil? e#) ~body e#)))