Scala paréntesis adicionales copia impresa
Pregunta
escribí mi primer programa de ejemplo Scala y se ve así:
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
La salida es
applying f1
aprintln
()
done applying f1
Puede alguien explicar por qué aparece el extra ()? Pensé que simplemente aprintln aparecería.
Gracias,
Jeff
Solución
Esto solucionará el problema:
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
(f1 _).apply
println("done applying f1")
}
Y también lo hará la siguiente:
def main(args: Array[String]) {
def f1 = "aprintln"
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
Lo que está pasando aquí es que se está ejecutando la función f1
con la llamada a apply
. El f1
función imprime 'aprintln', y devuelve ()
. A continuación, pasar la salida de f1
, que es ()
, a otra llamada a println
. Es por eso que se ve un par extra de Parans en la consola.
Los paréntesis vacíos tienen la unidad Tipo de Scala, lo que equivale a anular en Java.
Otros consejos
Los métodos que tendrían un tipo de retorno void en Java tienen un tipo de retorno de la unidad en Scala. () Es la forma de escribir el valor de la unidad.
En su código, llamadas f1 PRINTLN directamente. Así que cuando se llama a f1 y pasar su resultado a PRINTLN, ambos imprimir una cadena en el cuerpo de la F1, e imprimir su resultado, que se tostring'ed como ().