Closure
closure是指函数中包含自由变量(未在函数参数列表中指明),函数执行的结果依赖函数执行时候上下文,比如
def sum(a:Int,b:Int) = a + b + c
a,b在定义函数的参数列表中,是绑定变量;z没有出现在函数的参数列表中,为自由变量。
比如:
scala> var c = 3
c: Int = 3
scala> def sum(a:Int,b:Int) = a + b + c
sum: (a: Int, b: Int)Int
scala> sum(1,2)
res1: Int = 6
scala> c = 6
c: Int = 6
scala> sum(1,2)
res2: Int = 9
Currying
currying可以理解为将一个包含n个参数的参数列表,变成多个参数列表,每个包含一个或多个参数;实质上是将一次函数调用变成了多次函数调用。
比如:
scala> def sum(a:Int)(b:Int) = a + b
sum: (a: Int)(b: Int)Int
scala> sum(1)(2)
res3: Int = 3
可以理解为函数如下执行
传入参数1的时候,返回了一个函数表达式 (b:Int) => 1 + b;传入参数2的时候,对该表达式进行运算,获取结果3;计算了两次。
Partially applied function
这个是指只指定函数的部分参数值,获取一个新的函数,比如:
scala> def sum(a:Int,b:Int) = a + b
sum: (a: Int, b: Int)Int
scala> val sum1 = sum(1,_:Int)
sum1: Int => Int =
scala> sum1(2)
res7: Int = 3
参考自:Programming Scala 2nd edition
http://robpatro.com/blog/?p=53
阅读(927) | 评论(0) | 转发(0) |