Clojure是否会为每个函数调用重复启动新类(对象)?

Ert*_*tin 1 clojure

函数调用下面的低级操作是什么?

当我们从Clojure调用函数时会生成什么样的Java代码?

我想知道它的细节,以便我可以编写更多以性能为中心的代码.

Tim*_*dge 6

在clojure中,作为函数调用的任何东西都必须实现clojure.lang.IFn接口.此接口包含一个名为的重载方法invoke.函数在Clojure中是一流的,所以当你说(def square (fn [x] (* x x))),square被分配给实现的类的实例IFn.

总而言之:在Clojure中调用函数会导致在对象上调用方法的成本.