Как вы представляете прямоугольную 2 -размерную (или многомерную )структуру данных массива данных в Scala?
То есть каждая строка имеет одинаковую длину, проверенную во время компиляции , но размеры определяются во время выполнения?
Seq[Seq[A]]
имеет желаемый интерфейс, но позволяет пользователю предоставить "неоднородный" массив, что может привести к сбою времени выполнения -.
Seq[(A, A, A, A, A, A)]
(и подобные )действительно проверяют, что длины одинаковы, но также принудительно указывают эту длину во время компиляции.
Вот пример интерфейса того, что я имею в виду (Конечно, внутреннее измерение не обязательно должно быть кортежем; это может быть указано как списки или какой-либо другой тип):
// Function that takes a rectangular array
def processArray(arr : RectArray2D[Int]) = {
// do something that assumes all rows of RectArray are the same length
}
// Calling the function (OK)
println(processArray(RectArray2D(
( 0, 1, 2, 3),
(10, 11, 12, 13),
(20, 21, 22, 23)
)))
// Compile-time error
println(processArray(RectArray2D(
( 0, 1, 2, 3),
(10, 11, 12),
(20, 21, 22, 23, 24)
)))