这里有一些代码
(set! *warn-on-reflection* true)
(defrecord Foo [bar])
(.-bar (->Foo "bar"))
;;> Reflection warning, NO_SOURCE_PATH:1:1 - reference to field bar can't be resolved.
;;=> "bar"
正如我们所见,用于构建类型为 Foo
的记录的生成的 ->Foo
函数未提供类型提示,因此 Clojure 在进行互操作调用时会使用反射。
如果 Clojure 生成带有类型提示的构造函数那就更完美了。