在嵌套集合中有选项时遇到以下奇怪的问题:
val works: Array[Option[Int]] = Array(1)
.map { t => Some(t)}
val fails: Array[Array[Option[Int]]] = Array(Array(1))
.map { ts => ts.map { Some(_)} }
// error: type mismatch; found : Array[Array[Some[Int]]] required: Array[Array[Option[Int]]]
val worksButUgly: Array[Array[Option[Int]]] = Array(Array(1))
.map { ts => ts.map { case t => (Some(t).asInstanceOf[Option[Int]])}}
Run Code Online (Sandbox Code Playgroud)
我想这可能是沿途某种类型擦除的问题,但它是否是Scala中的预期行为?有谁知道究竟发生了什么?