Сбой List.transpose, когда любой элемент длиннее, чем элемент head - PullRequest
0 голосов
/ 19 февраля 2011

Как показано:

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)
...

Является ли это поведение преднамеренным?Если да, то почему?

РЕДАКТИРОВАТЬ: хотя часть вопроса была прояснена, я все же хотел бы предложить версию этого метода (возможно, с другим именем), которая принимает неправильные размеры.

1 Ответ

3 голосов
/ 19 февраля 2011

Да, это намеренно. Это быстро не удается при любой попытке использовать нерегулярные размеры. Ознакомьтесь с отчетом об ошибке https://issues.scala -lang.org / browse / SI-3399 . Также посмотрите, как написать транспонирование для вашего случая: Есть ли безопасный способ в Scala транспонировать список списков неравной длины?

Работает по старому методу. Где 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...