Scalaで不変のリストを作成する方法はいくつかあります(以下の不自然なサンプルコードを参照)。変更可能なListBufferを使用したり、var
リストを作成して変更したり、末尾再帰メソッドを使用したり、おそらく私が知らないその他の方法を使用したりできます。
私は本能的にListBufferを使用していますが、使用する正当な理由はありません。リストを作成するための推奨される方法または慣用的な方法はありますか、または別の方法よりもある方法に最適な状況がありますか?
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
だからである新しいリストが作成されますか?一方、先頭に追加する操作を使用しても、新しいリストは作成されませんか?