defprotocol 无法解析标签类名,这导致在使用了未在命名空间中导入的导入类作为标签声明的协议时抛出异常。
user=> (import 'clojure.lang.ISeq) clojure.lang.ISeq user=> (defprotocol p (^ISeq f [_])) p user=> (ns x) nil x=> (defn x [y] (let [z (user/f y)] (inc z))) CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: ISeq, compiling:(NO_SOURCE_PATH:4:33)
补丁: clj-1180-2.patch
审核: Alex Miller
- 我对这个补丁的唯一迟疑是让 tagToClass 成为公共的,并且从 core_deftype 中访问它,这意味着编译器 API 需要始终保持打开状态。