上記を達成する方法は何でしょうか?私は具体的に文書で言う:Clojureのテンプレート可変引数マクロ
argv defnのように引数リストです。
注:それはそうのように書くことができますが、私は、テンプレートを使用する方法を理解しようとしています:
(defmacro wrap-fn-> [& fns]
`(fn [~'x#]
(-> ~'x
[email protected])))
上記を達成する方法は何でしょうか?私は具体的に文書で言う:Clojureのテンプレート可変引数マクロ
argv defnのように引数リストです。
注:それはそうのように書くことができますが、私は、テンプレートを使用する方法を理解しようとしています:
(defmacro wrap-fn-> [& fns]
`(fn [~'x#]
(-> ~'x
[email protected])))
例はこちら
は、[& fns]
のような「残りの引数」の使用を示していません。私はあなたが間違っているところだと思います。これを試してみてください:
(println
(temp/apply-template
'[x y]
'(fn [payload] (-> payload x y))
'[fna fnb]))
=> (fn [payload] (-> payload fna fnb))
ところで、私は前に使用中のclojure.template
を見たことがない - それは非常に特殊なツールのように見えます。
はい、それはうまくいくでしょうが、固定数の 'fns'の場合、私はそれに可変数の引数を取ろうとしています。 これは学習目的のためのものです(clojure.testソースを見る前に見たことはありません)。実際には 'defmacro'を使って可変数の引数をとり、それを' apply-template'に渡します。これは純粋な好奇心です(これまでのところ)。さらに、なぜfnbではなくfnbが必要なのかわかりません。 – nha
'[&fns]'は '&'と 'fns'という2つのシンボルを含む引数リストであるため、' 'fnb'を"取ります "。あなたのテンプレート定義は '&'という名前の最初の引数を無視し、 'fna'を渡し、' fns'という名前の第2引数だけを使い、 'fnb'を渡します。 – amalloy
'template'は、役に立つと願っているので、' template'を使うことを学んでいるならば、気にしないでください。これはclojure.testの外では実生活では使用されておらず、かなり限定されたツールです。自分でマクロを書く方法を知っていれば、はるかに優れたものになります。 – amalloy