参见(更多细节,更多细节,更多细节):
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() }
答案 0 :(得分:3)
由于您使用Some(9)
,编译器知道所映射的元素是Int
。 List[_]
可以从不成为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() }
但是,为了记录,你可能正在做一些你不应该做的事情,你应该重新考虑你的代码。