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

我在命令'lein check'和'lein compile'上都会得到错误,在项目https://github.com/MichaelBlume/reify-fail, 但只有在我首先运行'/bin/rm -fr target'后(或在其目标目录尚未创建之前运行,例如在运行'Master git clone'命令之后立即运行)才会出现。

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

评论者:hiredman

如果我用:aot (link: com.lendup.citadel.pipeline com.lendup.citadel.providers.mocky)替换:aot :all,我就能重现这个错误。我怀疑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(由michaelblume报告)
...