代码之家  ›  专栏  ›  技术社区  ›  Julien Chastang

Clojure的惯例和常量?

  •  38
  • Julien Chastang  · 技术社区  · 15 年前

    在Clojure中定义常量的最佳实践是什么,比如样式、约定、效率等。

    例如,这对吗?

    (def *PI* 3.14)

    问题:

    在Clojure中常量应该大写吗?

    从风格上讲,它们的两边应该有星号(*)字符还是两边?

    有什么计算效率方面的考虑我应该知道?

    8 回复  |  直到 15 年前
        1
  •  43
  •   dkinzer    12 年前

    http://dev.clojure.org/display/community/Library+Coding+Standards :

    使用 耳罩 不要对常量使用特殊的符号; 除非另有规定,否则一切都假定为常数。

        2
  •  24
  •   Community CDub    12 年前

    我认为没有什么硬性规定。我通常根本不给他们任何特殊待遇。在函数式语言中,常量和任何其他值之间的区别很小,因为事物往往更纯粹。

    外面的 它们偶尔会被用户反弹到不同的流,这就是例子。

    pi . 我想我从来没见过有人在Clojure中给常量起特殊的名字。

    编辑:Carper先生刚刚指出,他自己在代码中大写常量,因为这是其他语言的惯例。我想这表明至少有人这么做。

    我匆匆浏览了一下 coding standards 但没有找到任何关于它的东西。这使我得出结论,这实际上取决于你是否将它们资本化。从长远来看,我不认为有人会因此扇你耳光。

        3
  •  13
  •   pjstadig    15 年前

    在计算效率方面,您应该知道Clojure中不存在全局常数。上面是一个var,每次引用它,它都会进行查找。即使你不戴耳罩,VAR总是会反弹,所以值总是会变化,所以它们总是在表中被查找。对于性能关键的循环,这无疑是非最优的。

    有一些选项,比如在关键循环周围放置一个let块,让任何“常量”变量的值都不被查找。或者创建一个无参数宏,使常量值为 进入密码。或者可以创建一个带有静态成员的Java类。

    有关更多信息,请参阅此帖子和以下有关常量的讨论:

    http://groups.google.com/group/clojure/msg/78abddaee41c1227

        4
  •  8
  •   Anders    15 年前

    耳罩是一种表示给定符号将有自己的方式 线程本地

    *clojure-version* 是Clojure中常量的一个例子,它完全是小写的。

        5
  •  4
  •   dkinzer    12 年前

    不要对常量使用特殊的表示法;除非另有规定,否则所有内容都假定为常量。

    看到了吗 http://dev.clojure.org/display/community/Library+Coding+Standards

        6
  •  1
  •   jhuni    14 年前

    Clojure有多种文字,例如:

    3.14159
    :point
    {:x 0 
     :y 1}
    [1 2 3 4]
    #{:a :b :c}
    

    文字是常量。据我所知,没有办法定义新的文字。如果要使用新常量,可以在编译时有效地在代码中生成文本:

    (defmacro *PI* [] 3.14159265358979323)
    (prn (*PI*))
    
        7
  •  1
  •   Mars    9 年前

    在普通的Lisp中,有一个用加号命名常量的约定( +my-constant+ ),在Scheme中,以美元符号作为前缀( $my-constant );参见 this page . 任何这样的约定都与官方的Clojure编码标准相冲突,在其他答案中也有联系,但也许有必要将常规的var和用 :const 属性。

    let ,等等,如果偶尔使用 def ,则当它的名称出现在同一文件中的函数定义中时,它看起来就像一个局部变量。如果函数很复杂,您可能要花几秒钟在函数中查找名称定义。根据变量的使用情况,添加一个明显的特征,如耳罩、加号或全大写,这样就可以明显地看出变量的定义在其他地方。

    pi 意思是,比如说,“打印索引”,或者第i个比萨饼,或者“保存的界面”。当然 我觉得这些变量应该有更多的信息,但是很多人使用的是晦涩的、简短的变量名,而我最终读到了他们的代码。我不必怀疑 圆周率 意思是圆周率,所以 PI

        8
  •  0
  •   Aymen    15 年前

    根据“实用的Clojure”一书,它应该被命名为 *pi*

    推荐文章