【发布时间】:2012-01-13 14:27:52
【问题描述】:
我相信我理解在宏扩展期间,宏无法访问函数可以访问的内容,因为扩展发生在编译时间之前。
但是,我无法理解如何在宏扩展时执行检查。
例如:
(defn gen-class [cl-nam]
(fn [cmd & args]
(condp = cmd
:name (name cl-nam))))
(defmacro defnclass [cl-nam]
`(def ~cl-nam (gen-class '~cl-nam)))
我想检查一下 cl-nam 不是一个序列。我想使用count并找出它的长度是> 1。
我知道我可以取消对以下宏中的 println 的引用,以便获得扩展时间消息。
(defmacro defnclass_info [cl-nam]
`(do
~(println cl-nam)
(def ~cl-nam (gen-class '~cl-nam))))
但是,我不确定如何检查 cl-nam 传递的内容。
我从几本书中阅读了很多 Clojure 宏描述,我很困惑。 谢谢。
【问题讨论】:
标签: clojure