在 Clojure 中,该概念已经存在于多个位置 - Compiler$CompilerException 和 EdnReader 和 LispReader 中埋藏的 Exception 类。它也适用于其他一些地方,比如抛出 IllegalArgunent 或其他异常的地方。
例如,这个协议异常抛出 IllegalArgumentException,并能在错误发生位置的文件、行和列信息,但它似乎奇怪地使用现有的异常来完成这个目的。
(defprotocol Bar (m [this]) (m [this arg]))