私はよく次のように書きます:
(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
がfalse(nilまたはfalse)の場合、またはfoo
whenenerfoo
がtrue(つまり、を除くすべてのnil以外の値false
)の場合に返されます。
if-not
nilはfalseと見なされるため、通常はこのような状況でも使用できます。もちろん、実際の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#)))