欢迎!请参阅关于页面,了解更多有关本站如何运作的信息。
https://github.com/MichaelBlume/reify-fail
`(defprotocol Foo(hello [this] "Says hello"))
`
(def bar(reify Foo
(hello [this] "hello, world")))
(when-not (satisfies? Foo bar)(throw (Exception. "bar doesn't satisfy Foo"))) `
备注
项目是 AOT另一个命名空间需要这个命名空间。该命名空间首先编译。没有那个命名空间,问题就会消失。
评论者:hiredman
在检出代码库后,您采取哪些步骤来复现此问题?
我已经克隆了代码库,并运行了lein compile,但没有出现任何错误。
lein compile
评论者:michaelblume
我用lein check复现了这个问题,但lein compile也失败了,所以我感到困惑。
lein check
我认为局部空命名空间应该首先编译,也许编译顺序上存在平台差异?
在Mac OS和Ubuntu下,测试仓库对我来说都失败了,两者都使用Java 8
在Ubuntu下,我有
$ lein -vLeiningen 2.7.1 在 Java 1.8.0_151 OpenJDK 64位服务器VM上
如果我用:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)替换:aot :all,我可以在那里重现错误。我怀疑lein可以在编译命名空间之间进行旧命名空间检查,以避免重复编译传递命名空间,从而解决这个问题。
:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)
:aot :all
可能与https://github.com/technomancy/leiningen/issues/2316相关
评论者:ikitommi
相关:[https://github.com/technomancy/leiningen/issues/2508](https://github.com/technomancy/leiningen/issues/2508)
评论者:bronsa
这是Clojure还是Lein的问题?我们能否通过裸clj代码重现这个问题?
clj
评论者:alexmiller
我怀疑你通过以特定顺序编译东西来可以重现它,但我还没有尝试这样做。但可能的答案是:按正确的顺序编译东西。