Error handling 什么';指示defmacro内部错误的常规方法是什么?
宏用什么常规的、行为良好的方式表示它被传递了无效参数Error handling 什么';指示defmacro内部错误的常规方法是什么?,error-handling,clojure,compiler-errors,macros,Error Handling,Clojure,Compiler Errors,Macros,宏用什么常规的、行为良好的方式表示它被传递了无效参数 (defmacro defthisthing [name & definitions] . . .) 我现在正在写一个宏来接受一大堆定义。如果同一事物被定义两次,宏就会抱怨。类似地,如果其中一个定义使用了在同一个宏调用中其他地方未定义的术语,则宏应该抱怨,最好是使用行号和列号,以便程序员能够准确地看到错误所在 我目前认为抛出异常最有意义,因为无效的宏参数实际上是一个编译错误。如果编译器发现不平衡的括号,一切都应该关闭 如果这是正确的
(defmacro defthisthing [name & definitions] . . .)
我现在正在写一个宏来接受一大堆定义。如果同一事物被定义两次,宏就会抱怨。类似地,如果其中一个定义使用了在同一个宏调用中其他地方未定义的术语,则宏应该抱怨,最好是使用行号和列号,以便程序员能够准确地看到错误所在
我目前认为抛出异常最有意义,因为无效的宏参数实际上是一个编译错误。如果编译器发现不平衡的括号,一切都应该关闭
如果这是正确的,那么要抛出的常规异常是什么?您如何包含有问题的代码片段的文件名和行号
如果这是不正确的,那么什么是更直接的方法呢?抛出异常听起来不错。我刚刚检查了Clojure源代码,下面是它的实现方式:
调用,如果参数不符合其要求,则抛出异常。这个问题似乎需要征求意见,因为词语是常规的或间接的。这可能会产生纯粹基于观点的答案,这些观点没有什么技术价值(“我喜欢用
foo
way”…)。你能不能请你的问题更关注你想要实现的技术方面?例如:“如何报告从宏内部传递的无效参数?”考虑如何报告宏中的错误没有问题,我可以想出许多方法。我想知道在Clojure做这件事的常规方法。