clojure中的构造名称是什么,在表达式的开头使用#在中间?例如
#(fn [a b] (% b a))
Run Code Online (Sandbox Code Playgroud)
我已经尝试在文档中搜索它,但由于定义它的两个字符都不是字母数字,我的搜索并不太成功.
它是匿名函数声明的读者宏.有关阅读器宏的完整列表,请参见http://clojure.org/reader.
例如,#(* 5 %)转换为(fn [x] (* 5 x)).
你的例子在阅读阶段转换为(fn [op] (fn [a b] (op a b)))(op我在那里选择占位符.)
它出现在(至少)两个地方:
在其他有用的功能和宏下(但没有提到%1%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)
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |