2015-03-01 4 views
6

Я пытаюсь вычислить список вхождений каждого символа в слове, мои текущие коды выглядят следующим образом:В Scala, почему `_` нельзя использовать в groupBy здесь?

"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$1) => "hello".groupBy(x$1).map(((a) => scala.Tuple2(a._1, a._2.length)))) 
"hello".groupBy(_).map(a=>(a._1, a._2.length)) 

      ^

У кого-нибудь есть идеи об этом? Или есть лучший способ написать это?

ответ

11

x.groupBy(_), как и любой метод x.foo(_), означает «превратить этот метод в функцию», то есть y => x.groupBy(y).

Потому что _ используется для многих вещей, это также может означать «подключить значение здесь». Тем не менее, «plug in identity» не работает из-за вышеизложенного.

Вы можете сделать x => x или identity, чтобы получить то, что вы намерены сделать _.

Смежные вопросы