Ответ Serj дает лучший способ написать это, но для ответа на ваш вопрос о том, почему ваша вторая версия не работает, вы можете перейти к спецификации Scala , что делает различие между определениями переменных и .
Из «4.2. Объявления переменных и определения»:
Определения переменных могут альтернативно имеют рисунок (§8.1) как левую сторону. Определение переменной
var p = e
, гдеp
- это шаблон, отличный от простого имени или имени, за которым следует двоеточие, и тип расширяется таким же образом (§4.1) в качестве определения значенияval p = e
, за исключением того, что свободный имена вp
вводятся как изменяемые переменные, а не значения.Из «6.15 Assignments»:
Интерпретация присваивания простой переменной
x = e
зависит от определенияx
. Еслиx
обозначает изменчивую переменную, то присваивание изменяет текущее значениеx
как результат оценки выраженияe
.
(first, rest)
вот шаблон , а не простая переменная, поэтому она работает в определении переменной, но не в присваивании.