嗨Alex :)
这可能是一个编译器错误 - 必要条件似乎是
- 自定义reader宏
- 在
defn
中的解构中
- AoT编译
例如。
(ns foo
(:require my.reader-macros))
(defn foo [{:keys [a], :or {a #my/reader-macro "..."}]
...)
在类文件中,我得到
static {
__init0();
__init1();
Compiler.pushNSandLoader(RT.classForName("foo__init").getClassLoader());
try {
load();
} catch (Throwable var1) {
Var.popThreadBindings();
throw var1;
}
Var.popThreadBindings();
}
load()
调用new foo.loading__9166().invoke()
,它应用了:require
但,在__init1()
(在我的情况下)它试图创建变量,包括应用arglists
元数据。在应用该元数据时,它有
RT.keyword((String)null, "or"),
RT.map(new Object[]{Symbol.intern((String)null, "a"), RT.readString("#my/reader-macro \"...\"")})
并且RT.readString
调用失败,因为my.reader-macros
尚未导入。
解决方案很简单,而且我敢说,鉴于移除上述三个条件中的任何一个都可以解决问题,但这仍然值得提出 :)
敬礼,
James