假设我有一堆命名空间(苹果,香蕉,桔子)。在这些命名空间中,我使用调用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