我經常寫類似如下:簡單的方法來判斷(if)中的零值?
(if (nil? a-value) another-value a-value)
是否有可用一個簡單的功能,如:
(if-nil? a-value another-value)
我經常寫類似如下:簡單的方法來判斷(if)中的零值?
(if (nil? a-value) another-value a-value)
是否有可用一個簡單的功能,如:
(if-nil? a-value another-value)
如果你想使用默認值,那麼通常的習慣用法是使用宏or
:
(or foo default-value)
將返回default-value
當foo
是falsey(零或假),或foo
whenener foo
是truthy(即除false
以外的任何非零值)。
在這種情況下,您通常也可以使用if-not
,因爲nil被認爲是錯誤的。當然,您需要注意實際的false
值,因爲這些值將被視爲零。
作爲最後的選擇,你可以隨時使用宏來獲得完全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#)))
當心雙重評價:'(讓[E#〜EXPR](如(無? e#)〜body e#))' – kotarak
當然,你絕對是對的。我被問題中給出的例子的簡單性所扼殺。謝謝! –
請注意,如果false爲foo的有效值,則需要小心使用此解決方案。 –