この質問は、this answerという制限に基づいています。リテラルでないシーケンスの引用符を付けないでください
私はこのようなスプライシングにunquoteを使用するマクロがある場合:
(defmacro instantiate [klass values]
`(new ~klass [email protected]))
をvalues
リテラルシーケンスまたは配列-ことができます場合にのみ動作します。
それはのようなシーケンスを保持VAR渡された場合:
(def v [1 2 3])
(macroexpand '(instantiate Person v))
を次に出力がv
が順序ではないことを示すエラーになります。
でも関数呼び出しがリストとして解釈されます:
(defn vf [] [1 2 3])
(macroexpand '(instantiate Person (vf)))
user=>(new Person vf)
私の質問は:シーケンスはISN」スプライスされるこれらの2つのケースでClojureのマクロでスプライシングにunquoteを使用する方法はありますリテラルですか?
なる可能性が...あなたは、物事を昔ながらの方法を実行する必要があり、彼らは仕事をいけないときを除いて、ほとんどすべての場合に多くの時間を節約しますだから時にはそれは不可能で、他の時は悪い考えです。ありがとう。 –