case样本序列
新增
原先的文章里定义形如:{case x => 1} 的语句为样本序列。并说道样本序列就是函数字面量。但最近读文章发现这种语句还有一个说法:偏函数(不同于偏应用函数)
偏函数的定义是相对于正常函数而言的。如果说正常函数的能处理他定义参数类型的所有实例。那偏函数就只能处理其定义类型的部分实例(真子集)。例如:
def fun (a:Int) => println(x) // 这是一个普通函数,这个函数可以处理所有Int 类型的参数
def fun : Int => Unit = {case 0 if x %2 ==0 => println(0)} // 这是一个偏函数,这个函数可以处理所有偶数类型的参数。偶数是Int的子集。
偏函数还有一些其他的性质:
- 偏函数只能接受一个参数(这是设计层面的考虑,理论上如果需要多个参数可以考虑用元组)
- 根据偏函数特质的定义:trait PartialFunction[-A, +B] extends (A) ⇒ B 。“-”符号作用于类型表示逆变,-A表明输入参数为A类型或A类型的父类,也就是说输入的参数应为A的子集,具有“部分”的含义。
- 前面说到偏函数只能处理参数定义类型的子集。但是真正能否处理一个具体的实例可以通过 “def isDefinedAt(a: A):Boolean”方法判断。
分割线 ·····················································
先看一段代码
val func1: Int =>