在clojure函数名中使用 - 和*

时间:2013-11-29 23:46:01

标签: clojure

我经常遇到一些clojure代码,其中函数名称以“ - ”开头或以“*”结尾,虽然我可以从上下文中做出一些猜测,但我还是找不到任何代码。他们指出的确切定义。有人可以给我一个快速的解释,或者指点我有一个吗?

3 个答案:

答案 0 :(得分:5)

函数约定是......约定。没有强制命名,但有些习惯来自于lisps。

  • -function被一些程序员用于defn-声明的私有函数。但也
  • .- ClojureScript对象的属性访问功能。
  • 功能?通常是布尔测试函数(偶数?,列表?,...)
  • 功能!是涉及副作用的功能。
  • 功能名称嵌入 - >是转换功能。
  • * var *是动态变量。

还有更多来自编程组惯例。

答案 1 :(得分:4)

最后一部分:foo*通常用于便捷宏foo的基础功能。例如,log vs log*

答案 2 :(得分:3)

“ - ”和“*”只是有效Clojure符号的一部分。它们本身没有任何特殊的含义,而Clojure编译器会像对待任何其他符号一样对待它们。

传统上,*用于包围动态var的名称。你可以在没有*的情况下创建一个var动态,但是当var的值由于在堆栈的某个地方binding调用而从其下面意外地改变时,它可能会导致处理代码的人混淆。通过包含*,你提醒那个var的每个用户每次写/读它的名字时都是动态的。

以“ - ”开头的符号通常与Clojure的gen-class结构一起使用。这是因为“ - ”是在将类的方法映射到函数时附加到方法名称的默认前缀。但是,它还有其他一些意思。

正如伊万指出的那样,还有其他一些惯例也值得了解。但是,它们只是惯例 - 就像其他语言中的camelCasing一样。