我在从服务器接收数据的模式匹配方面遇到困难:
scala> res
res9:Option[List[Any]] = Some(List(Some(List(Some(1))), Some(List(Some(2))), Some(List(Some(3))), Some(List(Some(4)))))
scala> res match {
| case x:Option[List[Any]] => println("yes")
| case _ => println("no")
| }
yes
是的,没有错误,但我真正想做的是:
res match {
case Some(List(
Some(List(Some(a: Int))),
Some(List(Some(b: Int))),
Some(List(Some(c: Int))),
Some(List(Some(d: Int)))
)) => println(s"yessss, a: $a; b: $b; c: $c; d: $d")
case _ => println("no")
}
出于某种原因,这里说“不”。
答案 0 :(得分:0)
您可以通过定义与您正在使用的数据相对应的extractor object来简化您的生活:
object Test extends App {
object My {
def unapply(x: Any): Option[Int] =
x match {
case Some(List(Some(a: Int))) => Some(a)
case _ => None
}
}
现在可以大大缩短与您的示例匹配的内容:
val res : Option[List[Any]] = Some(List(Some(List(Some(1))),
Some(List(Some(2))),
Some(List(Some(3))),
Some(List(Some(4)))))
res match {
case Some(List(My(a), My(b), My(c), My(d))) =>
println(s"yessss, a: $a; b: $b; c: $c; d: $d")
case _ => println("no")
}
}