【发布时间】:2013-11-05 18:44:00
【问题描述】:
我正在运行 Scala 2.10.2。我想创建一个列表,然后将一些元素添加到列表中,并希望在调用列表名称时看到列表中的所有元素。但是我观察到一些很奇怪的事情(至少对我来说很奇怪,因为我是新手)。以下是我在sbt console中尝试做的事情
scala> val l = 1.0 :: 5.5 :: Nil
l: List[Double] = List(1.0, 5.5)
scala> l
res0: List[Double] = List(1.0, 5.5)
scala> l ::: List(2.2, 3.7)
res1: List[Double] = List(1.0, 5.5, 2.2, 3.7)
scala> List(l) :+ 2.2
res2: List[Any] = List(List(1.0, 5.5), 2.2)
scala> l
res3: List[Double] = List(1.0, 5.5)
scala>
首先,我使用 2 个元素(1.0 和 5.5)创建了列表 l。我打电话给l,得到我所期望的;这两个元素。现在我尝试使用::: 将另一个元素添加到列表中,它返回了一个新列表,其中包含我添加的新元素列表(2.2 和 3.7)甜蜜!我什至检查了别人的代码以寻求帮助:Appending an element to the end of a list in Scala 使用新的构造 :+。所以在这个阶段我很高兴,但我打电话给l,我得到了意想不到的结果:`res3: List[Double] = List(1.0, 5.5)'。
我添加的元素在哪里?以及如何正确添加这些元素,以便当我调用 l 时,我会得到一个包含我添加的所有内容的新列表?
【问题讨论】:
-
您的所有语句实际上都没有修改
l -
列表通常是不可变的。在后一种情况下,您正在创建一个新列表,而原始列表保持不变。您可以使用可变列表或使用一种方法来重新附加。在 REPL 中,您也可以执行以下操作:val 转换 = List(l) :+ 2.2,然后打印出新值。