2017-03-03 18 views
0

上記を達成する方法は何でしょうか?私は具体的に文書で言う:Clojureのテンプレート可変引数マクロ

argv defnのように引数リストです。

注:それはそうのように書くことができますが、私は、テンプレートを使用する方法を理解しようとしています:

(defmacro wrap-fn-> [& fns] 
    `(fn [~'x#] 
    (-> ~'x 
     [email protected]))) 
+0

'template'は、役に立つと願っているので、' template'を使うことを学んでいるならば、気にしないでください。これはclojure.testの外では実生活では使用されておらず、かなり限定されたツールです。自分でマクロを書く方法を知っていれば、はるかに優れたものになります。 – amalloy

答えて

1

例はこちら

は、[& fns]のような「残りの引数」の使用を示していません。私はあなたが間違っているところだと思います。これを試してみてください:

(println 
    (temp/apply-template 
    '[x y] 
    '(fn [payload] (-> payload x y)) 
    '[fna fnb])) 

=> (fn [payload] (-> payload fna fnb)) 

ところで、私は前に使用中のclojure.templateを見たことがない - それは非常に特殊なツールのように見えます。

+0

はい、それはうまくいくでしょうが、固定数の 'fns'の場合、私はそれに可変数の引数を取ろうとしています。 これは学習目的のためのものです(clojure.testソースを見る前に見たことはありません)。実際には 'defmacro'を使って可変数の引数をとり、それを' apply-template'に渡します。これは純粋な好奇心です(これまでのところ)。さらに、なぜfnbではなくfnbが必要なのかわかりません。 – nha

+0

'[&fns]'は '&'と 'fns'という2つのシンボルを含む引数リストであるため、' 'fnb'を"取ります "。あなたのテンプレート定義は '&'という名前の最初の引数を無視し、 'fna'を渡し、' fns'という名前の第2引数だけを使い、 'fnb'を渡します。 – amalloy

関連する問題