Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling 什么';指示defmacro内部错误的常规方法是什么?_Error Handling_Clojure_Compiler Errors_Macros - Fatal编程技术网

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做这件事的常规方法。