Subrayado de Scala - ERROR: falta el tipo de parámetro para la función expandida

88

Sé que ha habido bastantes preguntas sobre esto, pero he creado un ejemplo simple que pensé que debería funcionar, pero aún no funciona y no estoy seguro de entender 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))

¿Alguien puede explicar por qué la segunda declaración no se compila?

Jeff Storey
fuente
4
Aún más simple:myStrings.foreach (println)
usuario desconocido

Respuestas:

120

Se expande a:

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

Usted quiere:

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

La sintaxis de marcador de posición para funciones anónimas reemplaza la expresión contenedora más pequeña posible con una función.

retrónimo
fuente
¿Por qué myStrings.foreach(println(_))se incluye automáticamente toStringpara el argumento println?
Kevin Meredith
1
@Kevi Meredith println llama al toString () de cualquier objeto que se pase
krookedking
1
La sintaxis de marcador de posición para funciones anónimas reemplaza la expresión contenedora más pequeña posible con una función. me ayudó con las dudas que expresé en esta pregunta: stackoverflow.com/questions/37589210/…
GA1