Conventions, Style, and Usage for Clojure Constants?
在样式,约定,效率等方面定义Clojure常量的最佳做法是什么?
例如,对吗?
问题:
常量应该在Clojure中大写吗?
从风格上讲,它们的一面或两面都应带有星号(*)?
我应该注意的任何计算效率方面的考虑?
从http://dev.clojure.org/display/community/Library+Coding+Standards:
Use earmuffs only for things intended for rebinding. Don't use a special notation for constants; everything is assumed a constant unless specified otherwise.
我认为没有任何硬性规定。我通常根本不给他们任何特殊待遇。在函数式语言中,常量和任何其他值之间几乎没有区别,因为事物通常是纯净的。
两侧的星号在Clojure中称为"耳罩"。它们通常用于指示"特殊"变量,或以后将通过绑定动态反弹的变量。诸如此类的东西,偶尔会被用户反弹到不同的流,这就是示例。
就个人而言,我将其命名为
编辑:卡珀先生刚刚指出,他本人在代码中大写了常量,因为这是其他语言的约定。我想这表明至少有一些人这样做。
我快速浏览了编码标准,但没有找到任何相关信息。这使我得出结论,是否将它们资本化完全取决于您。从长远来看,我认为没有人会为你打耳光。
在计算效率方面,您应该知道Clojure中没有全局常量之类的东西。上面的内容是一个var,每次引用它时,它都会进行查找。即使您没有戴上耳罩,var也会始终反弹,因此值始终会变化,因此总是在表中查找它们。对于性能至关重要的循环,这绝对是非最佳的。
有一些选项,例如在关键循环中放置一个let块,并让任何"常量"变量的值不被查找。或创建一个无参数的宏,以便将常量值编译到代码中。或者,您可以使用静态成员创建Java类。
有关更多信息,请参见本文和以下有关常量的讨论:
http://groups.google.com/group/clojure/msg/78abddaee41c1227
耳罩是一种表示给定符号在某个时候将具有其自己的线程局部绑定的方法。因此,将耳罩应用于Pi常量没有任何意义。
不要对常量使用特殊的符号;除非另有说明,否则所有内容均假定为常量。
参见http://dev.clojure.org/display/community/Library+Coding+Standards
在Common Lisp中,有一个用加号(
我认为为任何类型的非函数变量提供某种区别功能是有好处的。假设除了定义为保留函数的变量外,通常仅使用由函数参数,
另外,给pi等特殊常量一个特殊的名称是有充分的理由的,因此没有人会怀疑
Clojure具有多种文字,例如:
1 2 3 4 5 6 | 3.14159 :point {:x 0 :y 1} [1 2 3 4] #{:a :b :c} |
文字是常量。据我所知,没有办法定义新的文字。如果要使用新的常量,则可以在编译时在代码中有效地生成文字:
1 2 | (defmacro *PI* [] 3.14159265358979323) (prn (*PI*)) |
根据" Practical Clojure"一书,应将其命名为