Первое правило if
/ else
заключается в том, что типы обеих сторон должны совпадать.
Давайте рассмотрим первую (переформатированную, чтобы ее было легче читать).
a.map(i =>
if (((7 / 9.0 * i + 1 / 9.0) % 1) == 0)
(7*i+2, i, (7 / 9.0 * i + 1 / 9.0).toInt) //(Int,Int,Int) tuple
else n+1 //Int
)
Так что если a
что-то вроде List(5,6,7)
, то результат будет List(8, (37,5,4), 8)
. Это список типа List[Any]
. Это очень плохой знак. Всякий раз, когда вы встречаете тип Any
в Scala коде, он должен поднять красный флаг.
Затем вы пытаетесь map()
над этим списком. Вы не только неправильно понимаете синтаксис, но и каждый элемент имеет тип Any
. Вы не можете обращаться с каждым элементом как с кортежем, потому что это не Tuple
, это Any
. Вы не можете добавить 1
к элементу, потому что это не Int
, а Any
.
Время назад go и переосмысление этого с самого начала.