簡體   English   中英

添加到scala可變映射失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM