Sublinhado Scala - ERRO: tipo de parâmetro ausente para função expandida


87

Sei que tem havido algumas perguntas sobre isso, mas criei um exemplo simples que pensei que deveria funcionar, mas ainda não funciona e não tenho certeza se entendi por quê

val myStrings = new Array[String](3)
// do some string initialization

// this works
myStrings.foreach(println(_))


// ERROR: missing parameter type for expanded function
myStrings.foreach(println(_.toString))

Alguém pode explicar por que a segunda instrução não compila?


4
Ainda mais simples:myStrings.foreach (println)
usuário desconhecido

Respostas:


118

Ele se expande para:

myStrings.foreach(println(x => x.toString))

Você quer:

myStrings.foreach(x => println(x.toString))

A sintaxe de espaço reservado para funções anônimas substitui a menor expressão contendo possível por uma função.



Por que myStrings.foreach(println(_))inclui automaticamente toStringpara o argumento de println?
Kevin Meredith

1
@Kevi Meredith println chama o toString () de qualquer objeto que seja passado
krookedking

1
A sintaxe de espaço reservado para funções anônimas substitui a menor expressão contendo possível por uma função. me ajudou com as dúvidas que expressei nesta pergunta: stackoverflow.com/questions/37589210/…
GA1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.