假设我有下图:斯卡拉地图+ =操作
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