首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala映射中的scala.MatchError

scala映射中的scala.MatchError
EN

Stack Overflow用户
提问于 2018-05-16 16:50:27
回答 1查看 1.3K关注 0票数 0

我正在这里尝试scala,https://scastie.scala-lang.org/cUSu8uROQRy4llFWMaQ3bw

代码语言:javascript
复制
val days = List((1, (2, "a")), (1, (3, "b")), (1, (1, "c")), (2, (1, "aa")), (2, (2, "bb")))

val r = days map {
  case (n1, (n2, st)) if(n1!=2) => s"st = $st"
}

错误是:

代码语言:javascript
复制
scala.MatchError: (2,(1,aa)) (of class scala.Tuple2)

java.lang.ExceptionInInitializerError
    at Main.main(main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sbt.Run.invokeMain(Run.scala:67)
    at sbt.Run.run0(Run.scala:61)
    at sbt.Run.sbt$Run$$execute$1(Run.scala:51)
    at sbt.Run$$anonfun$run$1.apply$mcV$sp(Run.scala:55)
    at sbt.Run$$anonfun$run$1.apply(Run.scala:55)
    at sbt.Run$$anonfun$run$1.apply(Run.scala:55)
    at sbt.Logger$$anon$4.apply(Logger.scala:84)
    at sbt.TrapExit$App.run(TrapExit.scala:248)
    at java.lang.Thread.run(Thread.java:748)
Caused by: scala.MatchError: (2,(1,aa)) (of class scala.Tuple2)
    at Playground.$anonfun$r$1(main.scala:5)
    at scala.collection.immutable.List.map(List.scala:287)
    at Playground.<init>(main.scala:5)
    at Main$.<init>(main.scala:10)
    at Main$.<clinit>(main.scala)
    ... 14 more

为什么?怎么修呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-16 17:03:39

由于n1 != 2条件,列表中的某些条目与模式不匹配。显然,(2,(1,aa))不满足这个条件。所以你得到了一个匹配错误。你至少有两种明显的方法来解决这个问题。

第一种可能性:使用for-yield,这将使mapwithFilter

代码语言:javascript
复制
for ((n1, (n2, st)) <- days; if(n1!=2) ) yield s"st = $st"

第二种可能性:使用collect

代码语言:javascript
复制
val r2 = days collect {
  case (n1, (n2, st)) if(n1!=2) => s"st = $st"
}

这两项成果都是:

代码语言:javascript
复制
List(st = a, st = b, st = c)
List(st = a, st = b, st = c)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50376215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档