Chinaunix首页 | 论坛 | 博客
  • 博客访问: 348814
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 657
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-17 20:48
个人简介

行到水穷处,坐看云起时

文章分类

全部博文(85)

文章存档

2019年(2)

2018年(1)

2016年(1)

2015年(66)

2014年(15)

我的朋友

分类: Java

2015-03-22 23:12:00

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
阅读(892) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~