假設我有下圖:斯卡拉地圖+ =操作
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))
那麼它編譯成功。爲什麼編譯器在第一種情況下不能識別元組?
但爲什麼它嘗試使用該方法?據我所知,當一個方法只有一個參數,而不是沒有點符號的情況下使用(也沒有參數的參數)。在我的情況下,我使用方法+ =沒有點符號,所以下一條語句指出一個單個參數,它是一個2值的元組 – maks 2013-03-01 13:16:41
沒有這種限制,什麼時候可以使用沒有點符號的東西。例如:'對象A {def a(x:Int,y:Int)= x + y}',a a(1,2)'是完全有效的並且按預期工作。您示例中的第一個括號看起來像參數列表的開始。 – Impredicative 2013-03-01 13:20:48
@maks可能令人困惑的是,還有一些叫做(我認爲)的元組升級*,如果你傳遞了多個參數,這些參數需要單個元組arg,那麼這些參數將被編譯器包裝成一個元組。因此'對象A {def a(x:(Int,Int))= x._1 + x._2}'那麼'a a(1,2)'也可以工作......除非'A'有另一個)方法'a'需要2個參數,在這種情況下被調用。 – 2013-03-01 14:54:42