Clojure语言十:fn object

(fn..)可以用来创建匿名函数,比如:

user=> (fn [x] (+ 2 x))
#<user$eval328$fn__329 user$eval328$fn__329@f41393>

接受一个参数x,然后加上2. 上面的调用使用fn定义了一个函数,但是并没有执行。如果要立即执行,可以加上括号和参数:

user=> ((fn [x] (+ 2 x)) 5)
7


但是更多时候我们希望函数先定义,以后反复使用,可以结合def:

user=> (def f (fn [x] (+ 2 x)))
#'user/f


user=> (f 1)
3
user=> (f 6)
8

这样先定义了f函数,然后调用两次。

fn还支持变参的重载,并且实际上是实现了IFn接口。具体参考官方文档:

http://clojure.org/special_forms#fn

你可能感兴趣的:(Clojure语言十:fn object)