Легко инициализировать 2D-массив (или, фактически, любой многомерный массив) в Java, помещая что-то вроде этого:
int[][] x = new int[][] {
{ 3, 5, 7, },
{ 0, 4, 9, },
{ 1, 8, 6, },
};
Легко читается, он похож на 2D-матрицу и т.д. и т.д.
Но как это сделать в Scala?
Лучшее, что я мог бы придумать, ну, гораздо менее кратким:
val x = Array(
Array(3, 5, 7),
Array(0, 4, 9),
Array(1, 8, 6)
)
Проблемы, которые я вижу здесь:
- Повторяется "Массив" снова и снова (например, кроме
Array
) может быть что-то еще. - Это требует, чтобы опускать конец
,
в каждом вызове массива -
Если я испортил и вставлял что-то, кроме
Array()
в середине массива, он будет работать хорошо с компилятором, но типx
беззвучно станетArray[Any]
вместоArray[Array[Int]]
:val x = Array( Array(3, 5, 7), Array(0, 4), 9, // <= OK with compiler, silently ruins x Array(1, 8, 6) )
Существует защита от него, чтобы указать тип напрямую, но он выглядит еще более переполненным, чем на Java:
val x: Array[Array[Int]] = Array( Array(3, 5, 7), Array(0, 4), 9, // <= this one would trigger a compiler error Array(1, 8, 6) )
Этот последний пример нуждается в
Array
даже в 3 раза больше, чем я должен сказатьint[][]
в Java.
Есть ли какой-либо четкий способ?