Scala 当任何元素长于head元素时,List.transpose崩溃

Scala 当任何元素长于head元素时,List.transpose崩溃,scala,Scala,如图所示: scala> List(List(1, 2), List(3, 4), List(5, 6)) transpose res7: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6)) scala> List(List(1, 2), List(3), List(5, 6)) transpose res8: List[List[Int]] = List(List(1, 3, 5), List(2, 6)) scala>

如图所示:

scala> List(List(1, 2), List(3, 4), List(5, 6)) transpose
res7: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6))

scala> List(List(1, 2), List(3), List(5, 6)) transpose
res8: List[List[Int]] = List(List(1, 3, 5), List(2, 6))

scala> List(List(1, 2), List(3, 4, 7), List(5, 6)) transpose
java.lang.IndexOutOfBoundsException: 2
        at scala.collection.immutable.Vector.checkRangeConvert(Vector.scala:104)
...
这种行为是故意的吗?若然,原因为何


编辑:尽管部分问题已经澄清,但我还是想提出一种接受不规则尺寸的方法(可能有不同的名称)。

是的,这是有意的。任何使用不规则尺寸的尝试都很快失败。查看错误报告。还可以看看如何为您的案例编写转置:

它用老方法工作。其中7被默默忽略,而在前面的示例中,所有数字都显示为结果。我想这是不可取的:

scala> List.transpose(List(List(1, 2), List(3, 4, 7), List(5, 6)))
warning: there were 1 deprecation warnings; re-run with -deprecation for details
res4: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6))

是的,这是故意的。任何使用不规则尺寸的尝试都很快失败。查看错误报告。还可以看看如何为您的案例编写转置:

它用老方法工作。其中7被默默忽略,而在前面的示例中,所有数字都显示为结果。我想这是不可取的:

scala> List.transpose(List(List(1, 2), List(3, 4, 7), List(5, 6)))
warning: there were 1 deprecation warnings; re-run with -deprecation for details
res4: List[List[Int]] = List(List(1, 3, 5), List(2, 4, 6))

不,只有当第一个元素比任何其他元素都短时,它才会失败,即
List(List(1,2,3)、List(4)、List(5,6))转置
工作正常。在我看来,这是不一致的行为,即为什么第一个元素应该是特殊的?来自transpose doc:Transposes列表。Pre:所有元素列表都具有相同的长度。但我同意它在第二种情况下也应该失败。不,只有当第一个元素比任何其他元素都短时,它才会失败,即
List(List(1,2,3),List(4),List(5,6))transpose
工作正常。在我看来,这是不一致的行为,即为什么第一个元素应该是特殊的?来自transpose doc:Transposes列表。Pre:所有元素列表都具有相同的长度。但我同意在第二种情况下也应该失败。