2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面了解更多关于该机制的信息。

0
Clojure

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
另一个命名空间需要这个命名空间。该命名空间先编译。没有这个命名空间,问题就消失了。

12 个回答

0

评论由:hiredman 发布

在检出存储库后,您采取了哪些步骤来重现此问题?

我克隆了存储库并运行 lein compile,但没有错误。

0

评论由:michaelblume 发布

我使用 lein check 来重现问题,但 lein compile 也会出错,所以我感到困惑。

0

评论由:michaelblume 发布

我认为重要的是接近为空的命名空间先编译,也许在编译顺序上存在平台差异?

0

评论由:michaelblume 发布

在Mac OS和Ubuntu操作系统下,我的测试仓库失败了,两者都在使用Java 8版本。

0

评论由:michaelblume 发布

在Ubuntu系统下,我有

$ lein -v
在Java 1.8.0_151 OpenJDK 64-Bit Server VM上运行Leiningen 2.7.1

0
评论者:jafingerhut

这两个操作系统:Ubuntu 16.04.3 Linux,macOS 10.12.6

这两个版本的Leiningen:2.7.1,2.8.1

我相信所有的实验都使用了一个最近版本的JDK 1.8

使用以下的Clojure版本:1.7.0 1.8.0 1.9.0

在使用项目https://github.com/MichaelBlume/reify-fail,的命令'lein check'和'lein compile'时,我都会遇到错误,但只有在我先运行'/bin/rm -fr target'(或者在没有创建目标目录之前运行它,例如在运行'repo克隆'命令后立即运行)的时候才会遇到。

如果运行此命令两次,首次会创建许多.class文件在目标目录中,而第二次则不会出现错误。
0

评论由:hiredman 发布

当我将`:aot :all`替换为`:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)`时,能够重现该错误。我怀疑Leiningen可以通过在编译命名空间之间进行过时的ns检查来修复此问题,以避免重复编译传递命名空间。

0

评论由:hiredman 发布

可能与https://github.com/technomancy/leiningen/issues/2316有关

0

评论由:ikitommi

相关:[https://github.com/technomancy/leiningen/issues/2508](https://github.com/technomancy/leiningen/issues/2508)。

0
by

评论由:bronsa

这是 Clojure 还是 Lein 的问题吗?我们可以使用裸露的 clj 来复现这个问题吗?

0
by

评论由:alexmiller

我怀疑你可以通过以某种顺序编译事物来重现它,但我还没有尝试这样做。但是,结果可能有:以正确的顺序编译事物。

0
by
参考:https://clojure.atlassian.net/browse/CLJ-2303 (由michaelblume报告)
...