のは、私は私が欲しいものClojureではマップを持つキーが必要な関数を呼び出すことはできますか?
(defn test [ & {:keys [a b c]}]
(println a)
(println b)
(println c))
があるとしましょう{:a 1 :b 2 :c 3}
マップでテストを呼び出すことです。
これは動作します:
(apply test [:a 1 :b 2 :c 3])
これらはしないでください。
(apply test {:a 1 :b 2 :c 3})
(apply test (seq {:a 1 :b 2 :c 3}))
EDIT ですから、もちろん、このような関数を定義することができます。
(defn test [{:keys [a b c]}] ; No &
(println a)
(println b)
(println c))
そして、あなたはそれにマップを渡すことができます:
(test {:a 1 :b 2 :c 3})
1
2
3
私が見逃していたことを学ぶとき、これが可能でした。それでもあなたは私によって定義された関数や私のような誰かに遭遇した場合、それにマップを渡す方法を知ることがまだ役に立つかもしれません;)
それはあなたには、いくつかの空想な破壊をやろうとしていることを言及する価値があります。また、私はここでvariadic(&)argsをどのように使用するかについて混乱しています。もしあなたがvariadic argsを持っていなければ、あなたが望むようにマップを使ってtestを呼び出すことができます。 –
あなたが助けることができるなら、この "キーワードargs"をしないのが最善の選択であると約束しました。珍しい特定のケースではいいですが、レイヤー間を行き来するのは面倒です。そして一連のキーバリューを地図にするのは簡単ですが、あなたが見たように、キーベルのシーケンスにマップを作るのは簡単ではありません。 – amalloy
[ライブラリコーディング標準](http://dev.clojure.org/display/design/Library+Coding+Standards)は、アンロールの引数がマップを必要とするよりも優れていることを示唆しています(オプションの場合)。 –