我正在浏览一本受欢迎的Spark书籍中的一个Scala示例。它看起来很奇怪,至少作为一个新手。我知道Scala中的标准匹配/案例构造在Scala中是怎样的。但是在这个例子中我看到'case'正在使用而没有相应的'match'关键字。它甚至有效吗?或者更多的是书中的拼写错误?
class A extends B
class C implements D
因此,如果它不是常规匹配/案例,那么在某些其他情境中是否会使用“案例”?
由于
答案 0 :(得分:2)
在Scala规范中称为pattern matching anonymous functions,其中可以针对相同的行为删除先前的match
。
{ case p1 => b1 … case pn => bn }
相当于:
(x1:S1,…,xk:Sk) => (x1,…,xk) match {
case p1 => b1 … case pn => bn
}
反过来相当于:
new scala.Functionk[S1,…,Sk, T] {
def apply(x1:S1,…,xk:Sk): T = (x1,…,xk) match {
case p1 => b1 … case pn => bn
}
}
除非预期类型是部分函数:
new scala.PartialFunction[S, T] {
def apply(x: S): T = x match {
case p1 => b1 … case pn => bn
}
def isDefinedAt(x: S): Boolean = {
case p1 => true … case pn => true
case _ => false
}
}