2

私はよく次のように書きます:

(if (nil? a-value) another-value a-value)

次のような単純な関数が利用できますか?

(if-nil? a-value another-value)
4

2 に答える 2

4

デフォルト値を使用する場合、通常のイディオムはorマクロを使用することです。

(or foo default-value)

これはdefault-valuefooが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)))
于 2012-11-05T06:01:02.790 に答える
2

if-nil?単純にマクロを定義しないのはなぜですか。

(defmacro if-nil? [expr body] 
  `(let [e# ~expr] 
    (if (nil? e#) ~body e#)))
于 2012-11-05T05:46:36.173 に答える