为什么在类型上没有模式匹配会因为失败的情况而下降?

时间:2014-07-08 03:46:51

标签: scala pattern-matching

参见(更多细节,更多细节,更多细节):

scala> val v = Some(9).map { case lst: List[_] => lst; case i: Int => List() }
<console>:7: error: scrutinee is incompatible with pattern type;
 found   : List[_]
 required: Int
       val v = Some(9).map { case lst: List[_] => lst; case i: Int => List() }

1 个答案:

答案 0 :(得分:3)

由于您使用Some(9),编译器知道所映射的元素是IntList[_]可以从不成为Int,因此编译器会告诉您,您正在做一些没有意义的事情。

如果您希望编译器将其视为Some[Any],您必须明确说明该类型:

val v = Some(9: Any).map { case lst: List[_] => lst; case i: Int => List() }
// v: Option[List[Any]] = Some(List())

或更可能:

val x: Option[Any] = Some(9)
val v = x.map { case lst: List[_] => lst; case i: Int => List() }

但是,为了记录,你可能正在做一些你不应该做的事情,你应该重新考虑你的代码。