2012-03-29 8 views

Antwort

8

Methodennamen, die in : recht assoziativen enden, so versucht die b :: "apple":: Methode auf einem String aufzurufen, die nicht existiert.

Die normale Strategie zum Anhängen von Dingen, wenn Sie eine List verwenden müssen, ist es, Dinge am Anfang dann reverse das Ergebnis hinzuzufügen, wenn Sie fertig sind. Aber wie Rex sagt, könnte die Verwendung eines Vektors besser sein.

+0

Ahh, ich sehe, danke! Ich fragte mich, warum es mir diesen String-Fehler gab, ich nahm an, dass das genau das war, was es tat. Also die 2.: in :: macht es richtig assoziativ? – Andy

+0

Ja das ist es. –

6

:: verbindet immer ein neues Element mit dem Kopf einer Liste. Das Hinzufügen eines Elements zum Ende ist zwar möglich, benötigt aber Zeit, die proportional zur Länge der Liste ist (da die gesamte Liste nicht nur durchlaufen, sondern auch neu erstellt werden muss).

Wenn Sie wirklich ein Element am Ende einer Liste hinzufügen müssen, verwenden Sie :+:

List("pear","orange") :+ "apple" 

Noch besser wäre es, verwenden Vector, wenn Sie am Ende hinzufügen müssen (es ist viel schneller bei doppelseitigen Ergänzungen):

Vector("grape","peach") :+ "apple" 
0

Eine andere Möglichkeit ist ausdrücklich Nil bis zum Ende der Kette hinzuzufügen:

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) 
+0

Wenn Sie eine Liste 'val xs = List (1,2,3)' haben, an die Sie anhängen möchten, benötigen Sie für diese Technik die Listenanhangmethode ':::': 'xs ::: 4 :: Nil. –

Verwandte Themen