宏表示它已被传递无效参数的常规,表现良好的方式是什么?
(defmacro defthisthing [name & definitions] . . .)
我现在正在写一个宏来接受一大堆定义。如果相同的事情被定义两次,宏应该抱怨。类似地,如果其中一个定义使用的术语没有在同一个宏调用中的其他地方定义,那么宏应该抱怨,希望使用行号和列号,以便程序员可以准确地看到错误的位置。
我目前认为抛出异常最有意义,因为无效的宏参数实际上是编译错误。一切都应该关闭,就像编译器发现不平衡的括号一样。
如果这是正确的,抛出的常规例外是什么?那么如何包含有问题的代码片段的文件名和行号?
如果这不正确,Clojurely的方法是什么?
答案 0 :(得分:6)
抛出异常听起来不错。我刚刚检查了Clojure源代码,这就是它在那里的完成方式:
(defmacro let ...)
调用(defmacro assert-args ...)
,如果参数不符合要求,则抛出异常。