本章要点
- 在Scala中函数是“头等公民”,就和数字一样;
- 你可以创建匿名函数,通常还会把它们交给其他函数;
- 函数参数可以给出需要稍后执行的行为;
- 许多集合方法都接受函数参数,将函数应用到集合中的值;
- 有很多语法上的简写让你以简短且易读的方式表达函数参数;
- 你可以创建操作代码块的函数,它们看上去就像是内建的控制语句。
作为值的函数
在Scala中,你可以在变量中存放函数:
import scala.math._
val num = 3.14
val fun = ceil _
这段代码将num设为3.14, fun设为ceil函数。
说明: ceil函数后的 _ 意味着你确实指的是这个函数,而不是碰巧忘记给它传递参数。 从技术上讲, _ 将ceil方法转成了函数,在Scala中,你无法直接操纵方法,而只能直接操纵函数。
怎么使用函数:
- 调用它
- 传递它,存放在变量中,或者作为参数传递给另一个函数
fun(num) // fun是一个包含函数的变量,而不是一个固定的函数
Array(3.14, 1.42, 2.0).map(fun) // 将fun传递给另一个函数, Array(4.0, 2.0, 2.0)
匿名函数
在Scala中,你不需要给每个函数命名,它就是匿名函数:
(x: Double) => 3 * x
// 将这个函数存放在变量中
val triple = (x: Double) => 3 * x
// 这和用def一样
def triple(x: Double) = 3 * x
// 作为参数传递
Array(3.14, 1.42, 2.0).map((x: Double) => 3 * x)
Array(3.14, 1.42. 2.0).map{ (x: Double) => 3 * x } // 也可以使用花括号
Array(3.14, 1.42. 2.0) map { (x: Double) => 3 * x } // 使用中置表示法