Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在clojure函数名中使用-和*_Clojure - Fatal编程技术网

在clojure函数名中使用-和*

在clojure函数名中使用-和*,clojure,Clojure,我经常会遇到一些clojure代码,其中函数名要么以“-”开头,要么以“*”结尾,虽然我可以从上下文中进行一些猜测,但我无法找到它们所表示的确切定义。有人能给我一个快速的解释吗,或者给我指一个有这种解释的地方吗?函数的约定是……约定。没有强制命名,但有些习惯有时来自口齿不清 -函数被一些程序员用于defn-声明的私有函数。而且 -用于从ClojureScript访问对象的属性的函数 功能?通常是布尔测试函数(偶数?、列表?、…) 功能!是涉及副作用的功能 函数名->是转换函数 *var*是动态

我经常会遇到一些clojure代码,其中函数名要么以“-”开头,要么以“*”结尾,虽然我可以从上下文中进行一些猜测,但我无法找到它们所表示的确切定义。有人能给我一个快速的解释吗,或者给我指一个有这种解释的地方吗?

函数的约定是……约定。没有强制命名,但有些习惯有时来自口齿不清

  • -函数被一些程序员用于defn-声明的私有函数。而且
  • -用于从ClojureScript访问对象的属性的函数
  • 功能?通常是布尔测试函数(偶数?、列表?、…)
  • 功能!是涉及副作用的功能
  • 函数名->是转换函数
  • *var*是动态变量
还有更多来自编程组约定。

“-”和“*”只是有效Clojure符号的一部分。它们本身并不表示任何特殊的东西,Clojure编译器将像对待任何其他符号一样对待它们

按照惯例,*'用于包围动态变量的名称。您可以在不使用*'的情况下使变量成为动态变量,但如果由于堆栈上某个位置的
绑定
调用,变量的值意外地从它们下面更改,则可能会使处理代码的人感到困惑。通过包含*,您可以提醒该变量的任何用户,每当他们写入/读取其名称时,该变量都是动态的

以“-”开头的符号通常与Clojure的
gen类
结构结合使用。这是因为“-”是将类的方法映射到函数时附加到方法名称的默认前缀。然而,它也可能意味着其他一些事情


正如Ivan指出的,还有其他一些约定也值得了解。但是,它们只是约定——就像其他语言中的camelCasing一样。

最后一部分:
foo*
通常用于方便宏
foo
的底层函数。例如,

好吧,这回答了我一半的问题。有关于函数的线索吗?我想到函数!更具体地说,表示函数修改了某些数据结构的状态,而不是打印到标准输出。这回答了我的最后一个问题。尽管回顾一下导致我首先提出这个问题的代码,我认为它也用于其他辅助函数的底层函数,而不仅仅是宏。