如果我在尝试编译一个try调用了箭头构造器的defrecord时,我会收到一个警告。
这
(defrecord Foo [a b]
SomeProtocol
(some-method [_]
(->Foo new-a new-b)))
会显示“WARNING: 在第X行使用了未声明的Var some.ns/->Foo”的消息。Clojure可以接受这个形式。
如果我切换到点构造器版本,就像(Foo. _ _)
,它就可以编译了。
我注意到在clj defrecord
宏中,符号->Foo
和map->Foo
在开头就被声明了,但在cljs中,相关的build-positional-factory
和build-map-factory
函数是在emit-defrecord
之后调用的,可能这就是问题所在?
看起来deftype也应该有类似的问题,但我还没有测试。