1

为什么我可以写这样的东西而没有编译错误:

wordCount foreach(x => println("Word: " + x._1 + ", count: " + x._2)) // wordCount - is Map

即我声明了x变量。

但在这种情况下我不能使用魔法_符号:

wordCount foreach(println("Word: " + _._1 + ", count: " + _._2)) // wordCount - is 
4

2 回答 2

4

你应该检查这个关于占位符语法的答案

两个下划线表示两个连续的变量,所以 usingprintln(_ + _)是一个占位符,相当于(x, y) => println(x + y)

在第一个示例中,您只有一个常规的Tuple,它具有第一个 ( ._1) 和第二个 ( ._2) 元素的访问器。

这意味着当您只想多次引用一个变量时,您不能使用占位符语法。

于 2013-06-19T10:38:59.273 回答
2

每个下划线都是位置。所以你的代码被取消了

wordCount foreach((x, y) => println("Word: " + x._1 + ", count: " + y._2))

多亏了这一点,List(...).reduce(_ + _)才有可能。

此外,由于扩展是相对于最接近的括号进行的,它实际上看起来像:

wordCount foreach(println((x, y) => "Word: " + x._1 + ", count: " + y._2))
于 2013-06-19T10:39:29.853 回答