0

渡された引数の結果が(require 'value-of-argument). (defmacro r [x] `(require ~x)) と言うと(require value-of-x)、期待どおりに取得できますが、そこに引用符を取得する方法がわかりません。

編集:これは私の問題のより簡単な例です:

(defmacro q [x] `(str ~x))

=> (map (fn [e] (q e)) (map symbol ["x" "y" "z"]))
=> ("x" "y" "z")

でも、

(defmacro q [x] `(str '~x))

=> (map (fn [e] (q e)) (map symbol ["x" "y" "z"]))
=> ("e" "e" "e")
4

2 に答える 2

2

必要なのは、次のように引数を再度引用することだけです。

(defmacro r [x] `(require '~x))

それはトリックを行う必要があります。

編集: マクロが展開されるコンパイル時に x がわからないため、上記は機能しません。

しかし、今考えてみると、マクロを使わずに直接 require を呼び出してみませんか?

これはうまくいくようです:

(require (symbol "clojure.walk"))

それは役に立ちますか?

于 2013-04-12T03:43:39.793 に答える
0
(defmacro r [x] `(require (quote ~x)))
于 2013-04-12T18:55:59.857 に答える