2024年Clojure状态调查!中分享您的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

+3
Clojure

嗨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

登录注册以回答此问题。

...