这个概念已经存在于 Clojure 的多个地方 - Compiler$CompilerException 和在 EdnReader 和 LispReader 中埋藏的 Exception 类。在其他抛出 IllegalArgument 或其他异常的地方也很有用。
例如,这个协议异常抛出 IllegalArgumentException,可以传输错误位置的文件、行和列信息,但是使用现有的任何异常来完成这个目的似乎有点奇怪。
(defprotocol Bar (m [this]) (m [this arg]))