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 提出)
...