2024 Clojure状态调查!中分享您的想法。

欢迎!请访问关于页面获取更多关于如何使用本服务的信息。

+1
错误

在一个定义了协议,然后定义一个扩展该协议的类(例如,reify,defrecord,deftype),随后重新定义该协议(通常通过重新加载定义协议的命名空间)的情况下,现有的实例就不再有效。

但是,生成的异常可能会很混乱。

`

 java.lang.IllegalArgumentException: No implementation of method: :injections of protocol: #'fan.microservice/MicroService found for class: fan.auth.AuthService
                                       clojure.core/-cache-protocol-fn                  core_deftype.clj:  544
                                       fan.microservice/eval23300/fn/G                  microservice.clj:   12
                                                   clojure.core/map/fn                          core.clj: 2559
                                             clojure.lang.LazySeq.sval                      LazySeq.java:   40
                                              clojure.lang.LazySeq.seq                      LazySeq.java:   49
                                                clojure.lang.Cons.next                         Cons.java:   39
                                         clojure.lang.RT.boundedLength                           RT.java: 1654
                                           clojure.lang.RestFn.applyTo                       RestFn.java:  130
                                                    clojure.core/apply                          core.clj:  626
             fan.microservice.StandardContainer/construct-ring-handler                  microservice.clj:   51

`

混乱的一点是(在上面的例子中),AuthService扩展了MicroService,只是不是正确的那个版本。

异常消息应该扩展以标识“这可能是因为类定义之后重新加载了协议”。

补丁将很快准备好。

2 答案

0

评论者:hlewisship

包含测试的补丁

0
参考:https://clojure.atlassian.net/browse/CLJ-1490(由hlewisship报告)
...