Метод создания нового списка с добавленным элементом на самом деле :+
. Чтобы обновить список var
с добавленной версией, вам нужно сделать,
actualMessages :+= (contentType, payload)
Или вы можете добавить,
actualMessages +:= (contentType, payload)
// or, equivalently,
// actualMessages ::= (contentType, payload)
(Для больших списков предварительное добавление на самом деле предпочтительнее, так как оно равно O (1) по сравнению с O (n) для добавления. Одна из стратегий заключается в использовании предварительного добавления для построения списка в обратном порядке, а затем в конце вызова List.reverse
.)
С оператором +
, который вы пытаетесь использовать, Scala считает, что вы хотите выполнить конкатенацию строк,
scala> List("hello") + " world"
res0: java.lang.String = List(hello) world
Это неудачный перенос с Java. Общая конкатенация строк реализована в Scala с использованием неявного преобразования, определенного в scala.Predef ,
implicit def any2stringadd (x: Any): StringAdd
Происходит следующее: List
не реализует метод +
, поэтому компилятор ищет преобразование во что-то, что обеспечивает +
, и находит any2stringadd
. Вот как, например, true + " false"
работает.