“case”关键字未显示相应的“匹配”关键字

时间:2015-07-05 14:30:15

标签: scala apache-spark rdd

我正在浏览一本受欢迎的Spark书籍中的一个Scala示例。它看起来很奇怪,至少作为一个新手。我知道Scala中的标准匹配/案例构造在Scala中是怎样的。但是在这个例子中我看到'case'正在使用而没有相应的'match'关键字。它甚至有效吗?或者更多的是书中的拼写错误?

class A extends B
class C implements D

因此,如果它不是常规匹配/案例,那么在某些其他情境中是否会使用“案例”?

由于

1 个答案:

答案 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
  }
}