欢迎!请查看关于页面以获取更多关于如何使用本站的信息。
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 :all替换为:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky),就可以重现这个错误。我怀疑lein可以在编译命名空间之间执行陈旧的ns检查,以避免重复编译传递命名空间。
:aot :all
:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)
可能与https://github.com/technomancy/leiningen/issues/2316相关
评论者:ikitommi
相关:https://github.com/technomancy/leiningen/issues/2508.
评论者:bronsa
这是Clojure还是Lein的问题?我们能否通过裸代码clj重现这个问题?
clj
评论者:alexmiller
我怀疑你可能会按一定的顺序编译东西来重现它,但我还没有尝试过。但最终答案可能是:按正确的顺序编译。