Scala ';案例';关键字出现时没有相应的';匹配';关键词
我正在阅读一本流行的Spark书籍中的一个Scala示例。这对我来说很奇怪,至少作为一个新手。我知道Scala中的标准match/case构造在Scala中是什么样子的。但在本例中,我看到使用“case”时没有相应的“match”关键字。它甚至有效吗?还是书中有更多的打字错误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
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
}
}
措辞略有不同,但问题基本相同。另见:或