在样式,约定,效率等方面,在Clojure中定义常量的最佳实践是什么?
例如,这是对的吗?
(def *PI* 3.14)
问题:
常量应该在Clojure中大写吗?
在风格上,他们是否应该在一侧或两侧都有星号(*)?
我应该注意的任何计算效率考虑因素?
小智 43
来自http://dev.clojure.org/display/community/Library+Coding+Standards:
仅将耳罩用于重新绑定的物品.不要对常量使用特殊符号; 除非另有说明,否则一切都假设为常数.
Ray*_*yne 24
我认为没有任何硬性规定.我通常根本不给他们任何特殊待遇.在函数式语言中,常量和任何其他值之间的区别较小,因为事物通常更纯粹.
两侧的星号在Clojure中被称为"耳罩".它们通常用于表示"特殊"var,或者稍后将使用绑定动态反弹的var.东西一样出并在其中由用户和如实例偶尔反弹到不同的流.
就个人而言,我只想说出来pi.我不认为我曾经见过人们在Clojure中给常量赋予特殊名称.
编辑:卡尔先生刚刚指出,他自己将代码中的常量大写,因为它是其他语言的惯例.我想这表明至少有一些人这样做.
我快速浏览了编码标准,但没有发现任何相关信息.这使我得出结论,无论你是否利用它们,都取决于你.从长远来看,我认为没有人会为你拍打它.
小智 13
在计算效率方面你应该知道在Clojure中没有全局常量这样的东西.你上面的是一个var,每次你引用它时,它都会进行查找.即使你没有把耳罩放在上面,变速器总是可以反弹,所以价值总是会改变,所以它们总是在桌子上查找.对于性能关键循环,这绝对是非最佳的.
有一些选项可以在你的关键循环周围放置一个let块,并让任何"常量"变量值保持不变.或者创建一个无参数宏,以便将常量值编译到代码中.或者您可以使用静态成员创建Java类.
有关详细信息,请参阅此文章以及有关常量的以下讨论:
http://groups.google.com/group/clojure/msg/78abddaee41c1227
耳罩是一种表示给定符号在某些点上具有其自己的线程局部绑定的方式.因此,将耳罩应用于Pi常数是没有意义的.
*clojure-version* 是Clojure中常量的一个例子,它完全是小写的.
不要对常量使用特殊的表示法;除非另有说明,否则一切都假定为常数。
请参阅http://dev.clojure.org/display/community/Library+Coding+Standards
| 归档时间: |
|
| 查看次数: |
11361 次 |
| 最近记录: |