所以我认为我的问题与幕后发生的事情有关,但我不明白为什么这不起作用:
scala> b = b :: "apple";
<console>:8: error: value :: is not a member of java.lang.String
但这样做:
scala> b = "apple" :: b;
b: List[java.lang.String] = List(apple, pear)
感谢。
答案 0 :(得分:8)
以:
结尾的方法名称是右关联的,因此b :: "apple"
尝试在String上调用::
方法,该方法不存在。
如果必须使用List
,附加内容的正常策略是在开始时添加内容,然后在完成后reverse
结果。但正如Rex所说,使用Vector可能会更好。
答案 1 :(得分:6)
::
始终将新项目添加到列表的开头。可以在最后添加一个项目,但是它需要与列表长度成比例的时间(因为整个列表不仅必须遍历,而且实际上也必须重建)。
如果您确实必须在列表末尾添加项目,请使用:+
:
List("pear","orange") :+ "apple"
更好的是,当你需要添加到最后时使用Vector
(在双端添加时速度要快得多):
Vector("grape","peach") :+ "apple"
答案 2 :(得分:0)
另一种可能性是明确地将Nil
添加到链的末尾:
scala> val a = "apple"
a: java.lang.String = apple
scala> val b = "pear"
b: java.lang.String = pear
scala> a::b::Nil
res0: List[java.lang.String] = List(apple, pear)