私はよく次のように書きます:
(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)の場合、またはfoowhenenerfooがtrue(つまり、を除くすべてのnil以外の値false)の場合に返されます。
if-notnilは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#)))