在 Scala 中,为什么 `_` 不能在此处的 groupBy 中使用?

In Scala, why `_` can't be used in groupBy here?

我正在尝试计算一个单词中每个字符的出现列表,我当前的代码如下所示:

"hello"
  .groupBy((x:Char)=>x)
  .map(a=>(a._1, a._2.length))

我认为 .groupBy((x:Char)=>x) 看起来很笨拙,因此重写如下:

"hello"
  .groupBy(_)
  .map(a=>(a._1, a._2.length))

但随后编译器抛出错误

Error:(1, 18) missing parameter type for expanded function ((x) => "hello".groupBy(x).map(((a) => scala.Tuple2(a._1, a._2.length))))
"hello".groupBy(_).map(a=>(a._1, a._2.length))

            ^

有人对此有想法吗?或者有更好的写法吗?

x.groupBy(_),与任何方法 x.foo(_) 一样,表示 "turn this method into a function",即 y => x.groupBy(y).

因为 _ 用于很多事情,它 可以表示 "plug in the value here"。但是,由于上述含义,"plug in identity" 不起作用。

您可以通过 x => xidentity 获得您想要的 _