什么是Java中的"公共静态最终"常量的Clojure等价物

mik*_*era 10 java optimization performance constants clojure

我正在编写一些依赖于许多常量的Clojure代码.

它们将在紧密的内部循环中使用,因此通过Clojure编译器+ JVM组合尽可能高效地使用和优化它们非常重要.我通常会在Java中使用"public static final"常量来达到同样的目的.

申报这些的最佳方式是什么?

Car*_*icz 6

我认为 - def全局命名空间中的东西尽可能接近.

  • 添加:const元数据将导致它在编译时内联,请参阅@amalloy的回答.全局defs是vars,虽然接近,但可以在运行时进行调整并得到解决. (2认同)

ama*_*loy 6

我相信Clojure 1.3(或者可能是1.4)允许你在a上^:constant添加一个标记def,表示编译器应该是一个常量,所有引用都应该在编译时解析.

编辑

显然它是Clojure 1.3,而^:const不是^:constant.请参阅Clojure ^:const如何工作?总结.