Scala ';案例';关键字出现时没有相应的';匹配';关键词

Scala ';案例';关键字出现时没有相应的';匹配';关键词,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我正在阅读一本流行的Spark书籍中的一个Scala示例。这对我来说很奇怪,至少作为一个新手。我知道Scala中的标准match/case构造在Scala中是什么样子的。但在本例中,我看到使用“case”时没有相应的“match”关键字。它甚至有效吗?还是书中有更多的打字错误 val joined = userData.join(events)// RDD of (UserID, (UserInfo, LinkInfo)) pairs val offTopicVisits = joined.fi

我正在阅读一本流行的Spark书籍中的一个Scala示例。这对我来说很奇怪,至少作为一个新手。我知道Scala中的标准match/case构造在Scala中是什么样子的。但在本例中,我看到使用“case”时没有相应的“match”关键字。它甚至有效吗?还是书中有更多的打字错误

val joined = userData.join(events)// RDD of (UserID, (UserInfo, LinkInfo)) pairs
val offTopicVisits = joined.filter {
case (userId, (userInfo, linkInfo)) => !userInfo.topics.contains(linkInfo.topic)
}.count()
那么,如果它不是一个常规匹配/案例,“案例”是否在其他上下文中使用

感谢Scala规范中调用的

,在该规范中,可以为相同的行为删除先前的
匹配

{ 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
  }
}
这反过来相当于:

(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
  }
}

措辞略有不同,但问题基本相同。另见:或