评论者:alexmiller
这里第一个是一个内联函数,发生在编译期间,所以与其它不同。因为它内联,所以是不可 specs的。名称的组成部分是由编译器生成的。根据名称构造的规律性,这可能是有修复可能的,尽管我认为这并不特别重要。
后面两个一旦应用CLJ-2420将会有点不同
user=> (assoc) 执行错误(ArityException)在user$eval154/invokeStatic (REPL:1)。给:clojure.core/assoc--5406传递了错误的参数数量(0)
user=> (dissoc) 执行错误(ArityException)在user$eval156/invokeStatic (REPL:1)。给:clojure.core/dissoc传递了错误的参数数量(0)
我猜在这两种情况下,你所看到的数字都是Clojure中普遍使用的一种标准技术,所以问题可能在于是否有可能以系统化的方式解决它。当前函数并不携带其未经处理的名称,因此从类名中解密(demunging)永远不可能是一个万无一失的机制。
思考如何做得更好是值得的,但这不是我在近期内打算查看的问题。