2017-11-05 17 views
0

aの値はnilである場合とそうでない場合があります。Clojure関数呼び出しのオプションの引数

nilでない場合は、最初のパラメータとしてaの値で呼び出す必要がある(私のコントロール外の)束の関数があります。 nilの場合は、aなしで関数を呼び出す必要があります。私のような何かをしたいと思います

​​

代わりの

(defn my-fn [x] 
    (add-argument-if-not-nil-> a (beyond-my-control-fn x))) 

は、私はすでにこれを行うことができますか私は自分の作るべきマクロはありますか?

+0

'a'は名前空間レベル変数ですか?あなたの関数の引数として定義されていませんか? –

+0

これは、ダイナミックなトップレベル変数であり、ゼロでもなくてもかまいません。 – siltalau

答えて

3

あなたは別の関数で

(defn call-with-a-if-not-nil 
    [f a & args] 
    (if (nil? a) 
    (apply f args) 
    (apply f a args))) 

サンプルをものを超えて、あなたのコントロール機能の呼び出しをラップすることができます

​​
0

mavbozoの答えが正しいです。私はパラメータとして単純な機能の個人的な嫌悪のためにマクロを使いました。

(defmacro nn-> [x form] 
    (if x 
    `(-> ~x ~form) 
    `~form)) 

これは私がそうのようにそれを使用することができます、私には、よりエレガントである

(nn-> a (beyond-my-control-fn x)) 

(nn-> a (beyond-my-control-fn x y z)) 

関連する問題