2011-06-20 4 views
5

ディスパッチマクロを清潔にするために別のマクロにラップしたかったのです。しかし、Clojureは違った扱いをしているようです...あるいは、私は何かを誤解していますか?単に#のエイリアスを作成する場合を見てみましょう。Clojure - ディスパッチマクロは特別ですか?

(defmacro mkDef [x y] `~(list 'def x y)) 

をしかし、これはしていません::

これは動作します

(defmacro mkDispatch [x] `~(list '# x)) 

感謝を!

P.S.十分な担当者がいる方:syntax-macrosタグを作成してください。私は、同様の質問をよりよく探したいと思っています。

答えて

8

#ディスパッチマクロはリーダーマクロであり、リーダマクロは通常のマクロを使用して実装することはできません。それらは(eval)の代わりに(read)によって解釈されます。

関連する問題