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 报告)
...