Existem várias maneiras de construir uma lista imutável no Scala (consulte o código de exemplo inventado abaixo). Você pode usar um ListBuffer mutável, criar uma varlista e modificá-la, usar um método recursivo de cauda e provavelmente outros que eu não conheço.
Instintivamente, eu uso o ListBuffer, mas não tenho um bom motivo para fazer isso. Existe um método preferencial ou idiomático para criar uma lista ou há situações que são melhores para um método em vez de outro?
import scala.collection.mutable.ListBuffer
// THESE are all the same as: 0 to 3 toList.
def listTestA() ={
var list:List[Int] = Nil
for(i <- 0 to 3)
list = list ::: List(i)
list
}
def listTestB() ={
val list = new ListBuffer[Int]()
for (i <- 0 to 3)
list += i
list.toList
}
def listTestC() ={
def _add(l:List[Int], i:Int):List[Int] = i match {
case 3 => l ::: List(3)
case _ => _add(l ::: List(i), i +1)
}
_add(Nil, 0)
}
What you DON'T do is use a List and append to itÉ porque uma nova lista foi criada? Visto que usar uma operação prefixar não criará uma nova lista?