的匹配数组我有:斯卡拉 - 选项
val foo = Some(List(1, 2, 3)) -> Some("y")
我想投的比赛吧:
foo match {
case (Some(x), Some(y)) => println(x + " " + y)
case _ => println("error")
这工作正常Some(List(1, 2, 3) -> Some("score"))
但失败了Some(List(1, 2, 3) -> None
,None -> Some("y")
或None -> None
:
error: constructor cannot be instantiated to expected type;
found : Some[A]
required: None.type
error: not found: value ...
这是为什么?
当然,我可以使用getOrElse()
,但看起来并不那么优雅。
THX很多, 卡斯滕
更新:
foo match {
case (x: Some[List[Int]], y: Some[Int]) => println(x.get)
case _ => println("error")
}
失败以及与:
error: pattern type is incompatible with expected type;
found : Some[Int]
required: None.type
我认为case _
将采取照顾。
嗯,这是有道理的。但是,foo._1和foo._2可能被定义。这就是我想要的知道。 – Karsten
好吧,现在我明白了,我认为foo会是type(选项[List [Int]],Option [Any]) – Karsten
你可以这样做,但scala语言设计者决定给一些和无它自己的类型,所以这样的事情可以在编译时找到 这通常不是真正的代码中的问题,因为您将foo定义为您想处理的最通用类型,例如(Option [List [Int ]],Option [String])。 –