Scala学习札记_3 case语句与偏函数
Scala学习笔记_3 case语句与偏函数Scala通过case语句提供了形式简单、功能强大的模式匹配功能。但是也许你不
Scala学习笔记_3 case语句与偏函数
Scala通过case语句提供了形式简单、功能强大的模式匹配功能。但是也许你不知道,Scala还具有一个与case语句相关的语言特性,那就是:在Scala中,被“{}”包含的一系列case语句可以被看成是一个函数字面量,它可以被用在任何普通的函数字面量适用的地方,例如被当做参数传递。
new PartialFunction[List[Int], Int] {def apply(xs: List[Int]) = xs match {case x :: y :: _ => y}def isDefinedAt(xs: List[Int]) = xs match {case x :: y :: _ => truecase _ => false}}
这种转换是一种编译期行为,我们必须把second显式的声明为PartialFunction类型,如果没有给second指定类型,那么scala编译器会把后面的一组case语句编译成Function1类型,即完整的函数。
Tips:一组case语句要成为一个偏函数,那么它被赋予的变量必须被声明为PartionFunction[-A,+B]那么我们什么时候该使用偏函数?或者说偏函数给我们带来了什么好处?当我们确定我们的程序不会被传入不可处理的值时,我们就可以使用偏函数。这样万一程序被传入了不应该被传入的值,程序自动抛出异常,而不需要我们手工编写代码去抛出异常,减少了我们的代码量。