Обходной путь существует, если вам нужно инициализировать большое количество констант и вы хотите избежать записи val =
для каждой из них или если вы достигли ограничения размера кортежа (22).
Из раздела 4.1 Спецификация языка Scala :
Определение значения val x: T = e определяет x как имя значения, которое
Результаты оценки е. Определение значения val p1, ..., pn =
e является сокращением для последовательности определений значений val p1 = e; ...;
val pn = e.
В соответствии со спецификацией можно инициализировать последовательность значений, имена которых начинаются с заглавных букв, указав выражение справа, которое возвращает каждое значение по порядку.
val iter = Iterator(1, 2, 3)
val A, B, C = iter.next()
Другой пример:
val next = { var n = 0; () => { n = n + 1; n } }
val A, B, C, D, E, F, G, H = next()
В этих тривиальных случаях выше этот подход не очень полезен. Ниже приведен более полезный пример, который инициализирует константу для каждого из 64 квадратов шахматной доски (см. Источник Square.scala # L31 ):
val squareIter = squares.iterator
val A1, A2, A3, A4, A5, A6, A7, A8,
B1, B2, B3, B4, B5, B6, B7, B8,
C1, C2, C3, C4, C5, C6, C7, C8,
D1, D2, D3, D4, D5, D6, D7, D8,
E1, E2, E3, E4, E5, E6, E7, E8,
F1, F2, F3, F4, F5, F6, F7, F8,
G1, G2, G3, G4, G5, G6, G7, G8,
H1, H2, H3, H4, H5, H6, H7, H8 = squareIter.next()