代码之家  ›  专栏  ›  技术社区  ›  Alex Stoddard

clojure中如何使用“*var name*`命名约定?

  •  33
  • Alex Stoddard  · 技术社区  · 15 年前

    作为一名来到clojure的非lisper,我应该如何更好地理解vars的命名约定 *var-name*

    这似乎是一个表示全局变量的lisp约定。但据我所知,在clojure中,这样的变量出现在名称空间中。

    如果作者在代码中使用了这样的变量,我真的很想简单地解释一下我应该期待什么,最好是用一个例子说明在clojure库中如何以及为什么使用和更改这样的变量。

    3 回复  |  直到 15 年前
        1
  •  19
  •   seh Alexei    15 年前

    special variables ,有别于 . A. 动态 let defn ).

    注意,在他的书中 Let Over Lambda 道格·霍伊特(Doug Hoyte)反对命名特殊变量的“耳罩”asterix约定。他使用了一种不寻常的宏风格来引用自由变量,他更喜欢不承诺或不区分这些符号最终是指词汇变量还是动态变量。

    Ron Garret 作者的文章 The Idiot's Guide to Special Variables . 其中大部分仍然适用于Clojure。

        2
  •  18
  •   Arthur Ulfeldt    15 年前

    函数式编程就是关于 安全可预测函数 远距离行动 *un-warm-and-fuzzy* 不那么可爱

        3
  •  7
  •   Carl Smotricz    15 年前

    我在Clojure新闻组中找到了一些参考资料:

    回复:让代码可读 约翰·D。休谟 2008年12月30日星期二08:30:57-0800

    围绕着名字。

    我认为星号约定是用于 想法。”编程Clojure”在中建议它(不用说) 第六章第三节。


    阿贝尔斯。给它们命名是一种很好的风格 带前导和尾随星号。”

    显然,这本书正在进行中,但听起来确实如此 合理的。值发生变化的变量的特殊约定(或 不觉得需要有一个特殊的命名约定 有点价值。

    而且。。。

    围绕着名字。下划线(和CamelCase)只能在以下情况下使用 Java互操作需要:

    (def *grid-size* 10)
    (def *height* 600)
    (def *margin* 50)
    (def *x-index* 0)
    (def *y-index* 1)