特定の条件が真であればマップに情報をプッシュするクロージャー機能があり、そのマップを別の関数のパラメータとして使用します。条件付きで関数を呼び出す慣用のクロージャ
私は以下のようなことがありますが、バー機能を繰り返し呼び出すと不調です。
したがって、(何か)がtrueの場合、bar関数を呼び出す前にoptsパラメータに余分なオプションを追加します。それ以外の場合は、渡します。
特定の条件が真であればマップに情報をプッシュするクロージャー機能があり、そのマップを別の関数のパラメータとして使用します。条件付きで関数を呼び出す慣用のクロージャ
私は以下のようなことがありますが、バー機能を繰り返し呼び出すと不調です。
したがって、(何か)がtrueの場合、bar関数を呼び出す前にoptsパラメータに余分なオプションを追加します。それ以外の場合は、渡します。
まず最初は、(あなたが実際にtrue
の戻り値と1
、たとえば、の戻り値を区別しようとしている場合を除き)(= true (something))
は問題なく(something)
で簡単に交換することができるということです。返り値のオプションがtrue
とfalse
の場合、(something)
だけで正常に動作します。また、intoの代わりにmergeを使うこともできます。
あなたはそれが(something)
がfalseの場合に、第2引数にnil
で、merge
は非常に迅速に返す必要がありますが、不必要にmerge
を呼び出す必要が、これは、同様に動作します
(bar (if (something)
(merge opts {:a b})
opts))
を試みることができます。
(bar (merge opts
(when (something)
{:a b})))
条件コードを関数にリファクタリングします。次のようなものがあります:
(defn addAIfSomethig [opt] (if (something) (into opts {:a "A"}) opt))
(defn addBIfSomethig [opt] (if (something) (into opts {:b "B"}) opt))
次に、関数を使用して、bar use関数の呼び出しを変更する必要がある関数を修正します。
(defn foo [opt]
(let [modifiers (comp addAIfSomethig addBIfSomethig)]
(bar (modifiers opt))
))
レシピの回答は大丈夫です。 if
は、単なる条件付き構成ではなく、Clojureの式であることに注意してください。したがって、戻り値を持って、あなたは、関数へのパラメータとして戻り値を使用することができます。
(bar (if (something)
(into opts {:a b})
opts))
あなたはJavaで三項演算子と考えることができます。
のClojure 1.5ので、これは `` => {}({}ゼロに)ので
(cond-> opts (something) (merge {:a b}))
を書き込むことができ、あなたは 'のoptsに(バー((とき(何か){行うことができることを注意:ABを}))) '。 'into'の代わりに' merge'を使うこともできます。 – Jonas
@Jonasありがとう - – Retief