欢迎!请参考关于页面以获取有关如何操作的更多信息。
https://github.com/MichaelBlume/reify-fail
`(defprotocol Foo(hello [this] "说你好"))
`
(def bar(reify Foo
(hello [this] "hello, world")))
(when-not (satisfies? Foo bar)(throw (Exception. "bar 不满足 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 on Java 1.8.0_151 OpenJDK 64-Bit Server VM
如果将 :aot :all 替换为 :aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky),我能够重现这一错误。我怀疑Leiningen可以通过在编译命名空间之间执行陈旧的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(Clojure源文件)来复现这个问题吗?
评论者:alexmiller
我怀疑你可能可以通过按照某种顺序编译来复现这个问题,但我还没有尝试这样做。但可能的答案可能是:按正确的顺序编译。