Тип -безопасный прямоугольный многомерный массив типа

Как вы представляете прямоугольную 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)
)))
7
задан Mechanical snail 19 July 2012 в 04:46
поделиться