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?

Jeff Storey
fonte
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.

retrônimo
fonte
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