《Programming in Scala 3rd》阅读笔记

Chapter 15 《Case Classes and Pat

2018-06-26  本文已影响2人  liqing151

样例类是Scala对对象进行模式匹配而不需要大量样板代码的方式,对希望做模式匹配的类加上关键字case即可。在Scala中如果类的定义体是空时,可以省去定义体的花括号。


样例类

模式匹配

模式的种类

模式守卫
def simplifyAdd(e: Expr) =
 e match {
case BinOp("+", x, x) => BinOp("*", x, Number(2))
case _ => e
}

是不被允许的。使用模式守卫,以if打头。模式守卫可以是任意的布尔表达式,一般会引用到模式中的变量,如果存在模式守卫,这个匹配仅在模式守卫为true的时候才会成功。

 def simplifyAdd(e: Expr) = e match {
case BinOp("+", x, y) if x == y => BinOp("*", x, Number(2))
case _ => e
}

模式重叠

密封类

Option类型

Pattern is everywhere
val second: List[Int] => Int = {
case x :: y :: _ => y
}
val second: PartialFunction[List[Int],Int] = {
case x :: y :: _ => y
}

PartialFunction中定义了一个isDefinedAt方法,可以用来检查该函数对某个特定的数值是否有定义。偏函数的典型应用是模式匹配函数字面量(case序列),这个模式匹配会出现在PartialFunction定义中的两处,一处用于apply,一处用于isDefinedAt。在默认没有声明的情况下,函数字面量对应的就是全函数。


tips
上一篇 下一篇

猜你喜欢

热点阅读