所以我想我的問題有什麼是引擎蓋下事情要做,但我不明白爲什麼這不工作:爲什麼我不能在列表之後使用::在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