为什么我可以写这样的东西而没有编译错误:
wordCount foreach(x => println("Word: " + x._1 + ", count: " + x._2)) // wordCount - is Map
即我声明了x
变量。
但在这种情况下我不能使用魔法_
符号:
wordCount foreach(println("Word: " + _._1 + ", count: " + _._2)) // wordCount - is
你应该检查这个关于占位符语法的答案。
两个下划线表示两个连续的变量,所以 usingprintln(_ + _)
是一个占位符,相当于(x, y) => println(x + y)
在第一个示例中,您只有一个常规的Tuple
,它具有第一个 ( ._1
) 和第二个 ( ._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))