![](/img/trans.png)
[英]Adding mapping to collections.mutable.Map fails when map is empty
[英]Adding to scala mutable map fails
我不明白為什么+ =在我事先定義元組mapEntry然后將它添加到地圖時工作,同時嘗試直接添加繞過創建不必要的變量mapEntry失敗。 很可能我錯過了一些明顯的東西。 提前致謝。
這工作:map + = mapEntry,當這失敗時:map + =(“key-to-tom”,Person(“Tom”,“Marx”))
這是我完整的scala REPL會話
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45).
Type in expressions to have them evaluated.
Type :help for more information.
scala> case class Person(val fname:String, val lname:String)
defined class Person
scala> val map = scala.collection.mutable.Map[String,Person]()
map: scala.collection.mutable.Map[String,Person] = Map()
scala> val mapEntry = ("key-to-joe", Person("Joe", "Smith") )
mapEntry: (String, Person) = (key-to-joe,Person(Joe,Smith))
scala> map += mapEntry
res0: map.type = Map(key-to-joe -> Person(Joe,Smith))
scala> val mapEntry2 = ("key-to-ann", Person("Ann", "Kline") )
mapEntry2: (String, Person) = (key-to-ann,Person(Ann,Kline))
scala> map += mapEntry2
res1: map.type = Map(key-to-joe -> Person(Joe,Smith), key-to-ann -> Person(Ann,Kline))
scala> map += ("key-to-tom", Person("Tom", "Marx") )
<console>:11: error: type mismatch;
found : String("key-to-tom")
required: (String, Person)
map += ("key-to-tom", Person("Tom", "Marx") )
^
斯卡拉>
您的上一個語句失敗,因為您需要將元組括在括號中以表示您正在添加元組:
map += ( ("key-to-tom", Person("Tom", "Marx")) )
問題是+=
超載。 除了單個元組, +=
也可以帶兩個或更多個參數。 簽名是這樣的:
def +=(elem1: (A, B), elem2: (A, B), elems: (A, B)*): Map.this.type
你的元組是一個Tuple2
(它與一個Pair
相同,但仍然只是一個參數),這個重載方法需要2個參數(至少)。 Scala選擇后者作為更接近的匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.