例如:
val m = Map[Int, Int]()
m + (1, 1) // doesn't work!
m + ((1, 1)) // works!
我知道(1, 1)
是Tuple2
,但那么前者为何不起作用?我可以避免这种古怪的双括号吗?
答案 0 :(得分:6)
m + (1, 1)
与m.+(1, 1)
是一回事,也就是说,它是一个带有两个整数参数的函数调用,而不是一个带有单个Tuple2参数的调用。
然而,你可以使用->
形成一个没有括号的元组:
val m = Map[Int, Int]()
m + 1 -> 1 // works!
或者可能更有用:
var m = Map[Int, Int]()
m += 1 -> 1 // works!
答案 1 :(得分:2)
您的脚本无法正常工作,因为您尝试使用的方法并不存在。在您的情况下,Scala认为您希望将函数+
与两个参数(Int
和Int
)一起使用而不是一个(Tuple2
)。
解决问题的最佳方法是使用->
运算符。以下是示例代码:
scala> val m = Map[Int, Int]()
m: scala.collection.immutable.Map[Int,Int] = Map()
scala> m + (1 -> 1)
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1)
答案 2 :(得分:2)
在m + (1, 1)
的情况下,Scala认为你想用2个参数调用方法+
,即m.+(1, 1)
,并且因为这种方法不存在而失败。
当编译器对传递的参数数量毫无疑问时,你可以用这种方式编写它:
如前所述:
m + (1 -> 1)
或
val m = Map[Int, Int]()
val t = (1, 1)
m + t