【发布时间】:2019-10-28 10:28:41
【问题描述】:
我正在阅读 Russ Olsen 的《Getting Clojure》一书。在第 8 章“Def、Symbols 和 Vars”中,有如下函数定义:
(def second (fn second [x] (first (next x))))
^^^^^^
我的问题是关于带下划线的second,它排在第二位。
起初,我认为这种语法是错误的,因为匿名函数不需要名称。但是as it turnes out,这个语法是正确的。
Usage: (fn name? [params*] exprs*)
(fn name? ([params*] exprs*) +)
我尝试比较以下两个函数调用。
user> (fn second [x] (first (rest x)))
#function[user/eval5642/second--5643]
user> (fn [x] (first (rest x)))
#function[user/eval5646/fn-5647]
除了函数名,好像没有什么区别。
为什么fn 会有一个name? 参数?
【问题讨论】:
标签: clojure