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

欢迎!请查看关于页面了解该功能的更多信息。

+1
ClojureScript
重审

如果我在尝试编译一个try调用了箭头构造器的defrecord时,我会收到一个警告。

(defrecord Foo [a b]
  SomeProtocol
  (some-method [_]
    (->Foo new-a new-b)))

会显示“WARNING: 在第X行使用了未声明的Var some.ns/->Foo”的消息。Clojure可以接受这个形式。

如果我切换到点构造器版本,就像(Foo. _ _),它就可以编译了。

我注意到在clj defrecord 宏中,符号->Foomap->Foo在开头就被声明了,但在cljs中,相关的build-positional-factorybuild-map-factory函数是在emit-defrecord之后调用的,可能这就是问题所在?

看起来deftype也应该有类似的问题,但我还没有测试。


编辑
有趣的是,在Clojure中,deftype无法编译,而defrecord可以。

登录注册来回答此问题。

...