Clojure 2024 年调查问卷上分享您的想法!

欢迎!请查看关于页面以获取更多关于如何使用本站的信息。

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 在Java 1.8.0_151 OpenJDK 64位服务器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

在对项目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可以在编译命名空间之间执行陈旧的ns检查,以避免重复编译传递命名空间。

0

评论由:hiredman 提出

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

0
0

评论者:bronsa

这是Clojure还是Lein的问题?我们能否通过裸代码clj重现这个问题?

0

评论者:alexmiller

我怀疑你可能会按一定的顺序编译东西来重现它,但我还没有尝试过。但最终答案可能是:按正确的顺序编译。

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