1.函数
- 闭包(一个返回值依赖于外部变量的函数,在函数执行时暂时处于一个封闭状态)
//函数的变量只有i,返回值需要捕获函数外部的自由变量factor
val factor = 3
val multiplier = (i:Int) => i * factor
- 柯里化(原来接受两个或多个参数的函数,改为先接受一个参数并返回一个新的函数,新的再接受第二个参数返回最终结果)
//一般写法,同时接收两个参数
def add_1(x: Int, y: Int) = x + y
//先接收x参数,返回一个匿名函数(y: Int) => x + y,再接收一个y参数,返回x+y
def add_2(x: Int) = (y: Int) => x + y
//等价上面的写法
def add_3(x: Int)(y: Int) = x + y
2.定义函数
// 参数带默认值的函数
def show(name: String = "酒剑仙", addr: String = "西安"): Unit = println(s"name=$name, addr=$addr")
//不定长参数的函数
def sumInts(number: Int *): Int = number.sum
//值函数
val factorial: Seq[Int] => Int = (seq: Seq[Int]) => seq.product
3.高阶函数
val seq = Range(1, 10)
// 转换操作,比那里每个元素进行相应操作病返回新的序列
val seq1 = seq.map(_ * 2)
//排序
val sortSeq = seq.sortWith(_ > _)
//聚合
val sum = seq.reduce(_ + _)
//折叠函数
val sum2 = seq.fold(0)(_+_)
// 遍历但没有返回值
seq.foreach(println)
4.偏函数
-
偏函数: PartialFunction[A, B],即只作用于部分值的函数
-
A: 输入类型
-
B: 返回类型
-
-
定义偏函数
val list = List(-1, 2, 3, 0 ,-9)
//定义偏函数
def partialFun: PartialFunction[Int,Int] = {
case i:Int if i > 0 => i
case j:Int if j <= 0 => -j
}
//使用
list.collect(partialFun)
//直接定义匿名偏函数
list.collect{case i if i > 0 => i}