1

次のマップがあるとします。

import scala.collection.mutable._
val countries = Map[String, String](
    ("Paris", "France"), 
    ("Washington", "USA"),
    ("London", "England")
)

次に、そのマップにいくつかの値を追加しようとします (コマンド ライン引数から値を取得します)。

countries += (args(0), args(1))

しかし、上記のコードはそれを言ってコンパイルされません

found   : String
required: (String, String)

それを次のように変更すると

countries += ((args(0), args(1)))

または

countries += (args(0) -> args(1))

その後、正常にコンパイルされます。最初のケースでコンパイラがタプルを認識しなかったのはなぜですか?

4

2 に答える 2

5

Scaladocから:

def +=(elem1: (A, B), elem2: (A, B), elems: (A, B)*): Map.this.type は、この縮小可能なコレクションに 2 つ以上の要素を追加します。

+=つまり、多数の要素を一度に追加できるのオーバーロード バージョンがあります。あなたの例は、それらの引数のそれぞれが間違った型であると(正しく)不平を言っていることを除いて、(複数の引数に通常の規則を使用して)それをやろうとしているように見えます。

于 2013-03-01T13:05:46.877 に答える
1

コンパイラは、2 つのパラメーターが渡されていると見なし、最初の括弧をパラメーター リストの区切り記号として解釈しました。

于 2013-03-01T13:05:03.827 に答える