2012-03-29 6 views
0

は、だから私は、私の問題は、フードの下で何が起こっているかに関係していると仮定し、これは動作しますしない理由を私は理解していない: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) 

ありがとう。

答えて

8

メソッド名は、右結合されているので、b :: "apple"が存在しない文字列に::メソッドを呼び出そう。

Listを使用する必要がある場合は、追加するための通常の方法は、完了したら結果をreverseの先頭に追加することです。しかし、Rex氏によると、Vectorを使うほうが良いかもしれません。

+0

ああ、私は、感謝を参照してください!私はなぜそれが私に文字列エラーを与えていたのだろうと思っていた、私はそれが何をしていると仮定した。だから2番目の:::それは正しい会合を作る? – Andy

+0

はい、それです。 –

6

::は常にリストの先頭に新しい項目を追加します。アイテムを最後まで追加することはできますが、リストの長さに比例した時間が必要です(リスト全体を横断するだけでなく、実際には再構築する必要があるため)。

あなたは本当に、リストの最後に項目を追加する必要があります:+を使用する場合:

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

いっそのこと、あなたが最後に追加する必要がある場合(これはダブルエンド追加ではるかに高速だVectorを使用)::で終わる

Vector("grape","peach") :+ "apple" 
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) 
+0

追加したいリスト 'val xs = List(1,2,3)'を持っているなら、このテクニックのためにリスト追加メソッド ':::'が必要です: 'xs ::: 4 ::いいえ。 –

関連する問題