我经常遇到一些clojure代码,其中函数名称以“ - ”开头或以“*”结尾,虽然我可以从上下文中做出一些猜测,但我还是找不到任何代码。他们指出的确切定义。有人可以给我一个快速的解释,或者指点我有一个吗?
答案 0 :(得分:5)
函数约定是......约定。没有强制命名,但有些习惯来自于lisps。
还有更多来自编程组惯例。
答案 1 :(得分:4)
最后一部分:foo*
通常用于便捷宏foo
的基础功能。例如,log
vs log*
答案 2 :(得分:3)
“ - ”和“*”只是有效Clojure符号的一部分。它们本身没有任何特殊的含义,而Clojure编译器会像对待任何其他符号一样对待它们。
传统上,*用于包围动态var的名称。你可以在没有*的情况下创建一个var动态,但是当var的值由于在堆栈的某个地方binding
调用而从其下面意外地改变时,它可能会导致处理代码的人混淆。通过包含*,你提醒那个var的每个用户每次写/读它的名字时都是动态的。
以“ - ”开头的符号通常与Clojure的gen-class
结构一起使用。这是因为“ - ”是在将类的方法映射到函数时附加到方法名称的默认前缀。但是,它还有其他一些意思。
正如伊万指出的那样,还有其他一些惯例也值得了解。但是,它们只是惯例 - 就像其他语言中的camelCasing一样。