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
Leiningen 2.7.1 on Java 1.8.0_151 OpenJDK 64-Bit Server VM

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

在命令 'lein check' 和 'lein compile' 中,我会在项目 https://github.com/MichaelBlume/reify-fail, 中获得错误,但只有在先执行 '/bin/rm -fr target' 的情况下才会出现(或者在使用目标目录之前执行,例如在运行 'git clone' 命令之后立即运行)。

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

评论者:hiredman

如果我将 :aot :all 替换为 :aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky),我可以在那里重现错误。我怀疑Lein可以修复这个错误,通过在编译命名空间之间进行过时的ns检查来避免重复编译传递命名空间。

0

评论者:hiredman

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

0

由ikitommi发表的评论

相关: https://github.com/technomancy/leiningen/issues/2508.

0

评论由: bronsa 发布

这是否是一个 clojure 或 Lein 问题?我们可以使用裸 clj 来重现这个问题吗?

0

评论由: alexmiller 发布

我怀疑可以通过以一定的顺序编译某些内容来重现它,但我还没有尝试这样做。但可能的答案可能是:以正确的顺序编译内容。

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