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

¿Fue útil?

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 ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top