在Scala中,List是不变的但是

时间:2016-04-19 07:54:31

标签: list scala-collections

我是Scala语言的初学者。在Scala中,List是不可变的,如下面的代码所示:

scala> var list = List(1,2,3,4,5)    // List created named ‘ list ’                                           

list: List[Int] = List(1, 2, 3, 4, 5)                                           

scala> 25 :: list // Prepend with Cons( :: ) , But here new list created.                                                        
res2: List[Int] = List(25, 1, 2, 3, 4, 5)

scala> list                        // print ‘  list ’   
res3: List[Int] = List(1, 2, 3, 4, 5)

但是,

scala> list                                                                     
res1: List[Int] = List(1, 2, 3, 4, 5)                                           

scala> list :+= 12     // append list with :+=

scala> list                                                                     
res2: List[Int] = List(1, 2, 3, 4, 5, 12)

在上面的例子中,附加了相同的“列表”。然后列表是如何不可变的?这让我很困惑。有人向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

http://daily-scala.blogspot.co.uk/2010/03/implicit-operator.html

:+=不只是附加,它会附加到新列表并重新分配变量以指向新列表。它相当于list = list + 12

25 ++ list正在制作一个新列表,但不会将其分配到任何地方。