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?


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.



¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.