所以我想我的问题有什么是引擎盖下事情要做,但我不明白为什么这不工作:为什么我不能在列表之后使用::在Scala中添加字符串?
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)
谢谢。
所以我想我的问题有什么是引擎盖下事情要做,但我不明白为什么这不工作:为什么我不能在列表之后使用::在Scala中添加字符串?
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)
谢谢。
方法名是右关联,所以b :: "apple"
试图调用一个字符串,不存在::
方法。
如果您必须使用List
,则附加内容的正常策略是在完成时将结果添加到开头,然后reverse
结果。但正如Rex所说,使用Vector可能会更好。
::
总是加入一个新的项目列表的头部。添加项目到年底可以做到的,但是这需要时间成正比的名单(因为整个列表不仅要穿越但实际上,又重修)的长度。
如果你真的必须将项目添加到列表的末尾,使用:+
:
List("pear","orange") :+ "apple"
更重要的是,使用Vector
当你需要添加到末尾(它的速度更快的双端增加):在:
结束
Vector("grape","peach") :+ "apple"
另一种可能性是明确添加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)
如果你有一个列表'VAL XS =名单(1,2,3)'来要追加,则需要在列表append方法'':::这种技术:'XS ::: 4 :: Nil'。 – 2012-03-29 22:00:25
啊,我明白了,谢谢!我想知道为什么它给了我那个字符串错误,我认为它是在做什么。所以第二:在::使它正确的联想? – Andy 2012-03-29 14:26:24
没错,就是这样。 – 2012-03-29 14:31:12