假設我有一堆命名空間(蘋果,香蕉,桔子)。在這些命名空間中,我使用調用eat
宏,該宏調用(不是「生成」,調用)peel
函數。每個水果的peel
函數是不同的,但宏是相同的,並且相當大,所以我想要創建一個包含eat
宏的名稱空間fruit
。但是當我從apple
名稱空間調用eat
宏時,eat
宏應該調用apple/peel
函數。關於clojure命名空間和宏的問題
爲了說明(但不工作):
(ns fruit)
(defmacro eat [] (peel))
(ns apple)
(defn peel [] (prn "peeled apple"))
(fruit/eat)
(ns banana)
(defn peel [] (prn "peeled banana"))
(fruit/eat)
要強調的是,這意味着剝離功能應時,稱爲且僅當宏被擴展爲在本例子。
(ns apple)
(defn peel [] (prn "peeled apple"))
(defmacro eat [] (peel))
(macroexpand-1 '(eat))
那麼,關於如何結合宏和多態的任何想法?
謝謝,但事實上並非我的意思。它在這裏得到了期望的結果,但不是在我的實際使用情況中。 – 2010-03-02 15:17:55