评论者:alexmiller
这里的第一个是一个内联函数,发生在编译期间,所以与其他不同。因为它被内联,所以不能特定化。那里的名称部分是在编译过程中生成的。这个根据名称构建的规律性,可能会被修复,尽管我不认为这是一个特别高的优先级。
应用CLJ-2420后,后两个将会有所不同
user=> (assoc) 执行错误(ArityException)在user$eval154/invokeStatic (REPL:1)中。向clojure.core/assoc--5406传递了错误的参数数量(0)。
这里的变化实际上省略了所有内部帧,现在报告最顶层的用户帧(在这里,它发生在REPL调用中,但如果它在一个用户命名空间中,你会看到那个)。
我认为在这两种情况下,你看到的数据是 Clojure 中常用的标准技术,所以问题可能在于是否可能以系统化的方式解决这个问题。目前函数没有内在地携带它们的原始名称,因此从类名称中解包永远不会是一个万无一失的机制。
值得考虑如何做得更好,但这不是我希望近期关注的。