在clojure中#和%的名称是什么?

Jim*_*ies 2 clojure

clojure中的构造名称是什么,在表达式的开头使用#在中间?例如

#(fn [a b] (% b a))
Run Code Online (Sandbox Code Playgroud)

我已经尝试在文档中搜索它,但由于定义它的两个字符都不是字母数字,我的搜索并不太成功.

unp*_*680 8

它是匿名函数声明的读者宏.有关阅读器宏的完整列表,请参见http://clojure.org/reader.

例如,#(* 5 %)转换为(fn [x] (* 5 x)).

你的例子在阅读阶段转换为(fn [op] (fn [a b] (op a b)))(op我在那里选择占位符.)


and*_*oke 6

它出现在(至少)两个地方:

  1. 其他有用的功能和宏下(但没有提到%1%2等).

  2. Reader(解析程序)中 - #导致通过表查找调度到读取器宏(你必须仔细查看,但这确实描述了%1等)

在这两种情况下,它都没有有用的名称(实际上,"Dispatch"可能是隐含的名称 - 请参阅第二个链接).更常见的是"#"被称为octothorp,其中包括(在智利,"gato"(cat),原因不明).

(是的,%1%2是第一个和第二个参数等,而%&是"休息" - 你可以只使用%作为第一个 - 见第二个链接).

PS正如其他人所说,它是功能的简写.所以(fn [a b] (+ a b))相当于#(+ %1 %2):

Clojure> (#(println % % %2) 1 2)
1 1 2
nil
Clojure> (#(apply println %&) 1 2 3)
1 2 3
nil
Run Code Online (Sandbox Code Playgroud)