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下,我的test repo失败了,两者的Java都是8版本。

0

由 michaelblume 发布的评论

在Ubuntu上,我有

$$ lein -v
Leiningen 2.7.1 在 Java 1.8.0_151 OpenJDK 64位服务器JVM上

0
评论制作人:jafingerhut_

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

这两个版本的Leiningen:2.7.1,2.8.1

我相信所有的实验都使用的是Java开发工具包(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”命令后(或者在与目标目录初次创建前,例如,在运行完“git clone”命令之后立即运行)才如此。

如果我运行这个命令两次,第一次会在目标目录中创建许多.class文件,而第二次则不会报错。
0

由 hiredman 发布的评论

当我把:aot :all替换成:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)时,就能复现这个错误。我怀疑lein可以通过在编译命名空间之间进行旧命名空间检查来修复这个问题,以避免重复编译转递命名空间。

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(由 micahelblume 提出)
...