请分享您的想法,参加2024年Clojure状态调查!

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

+1 投票
ClojureScript
重新显示

如果尝试编译一个尝试调用箭头构造器的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允许这样做。

登录注册以回答这个问题。

...