Cuál es la diferencia entre
object Application extends App {
println("Hello World")
}
y
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
Cuál es la diferencia entre
object Application extends App {
println("Hello World")
}
y
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
Respuestas:
El rasgo de la aplicación es una forma conveniente de crear un programa scala ejecutable. La diferencia con el método alternativo principal es (aparte de las diferencias sintácticas obvias) que el rasgo de la aplicación utiliza la función de inicialización retrasada.
De las notas de la versión de 2.9 (consulte http://www.scala-lang.org/old/node/9483 )
Los objetos que heredan el rasgo de la aplicación, en su lugar, utilizan la función de inicialización retrasada de Scala 2.9 para ejecutar todo el cuerpo como parte de un método principal heredado.
Otra característica nueva del esquema de la aplicación es que ahora se puede acceder a los argumentos de la línea de comandos a través del valor args (que se hereda de la aplicación trait)
main
método y el cuerpo no se ejecuta como se esperaba? ¿Se ejecuta en algún momento después de la entrada a main?
main
método en el App
rasgo que se mezcla con su Application
objeto. No hay magia más allá del hecho de que la inicialización retrasada es lo que ejecuta el cuerpo de su Application
objeto.
Estos dos casos no son iguales en las secuencias de comandos de Scala.
object extends App
no fue ejecutado por " scala MyObject.scala
" comando, pero el objeto que contiene el método principal fue ejecutado por " scala MyObject.scala
" comando. Que se describió como scala buscando un objeto con el método principal para la creación de scripts.
Cuando utilice REPL o el conjunto de trabajo scala de Eclipse, debe llamar MyObject.main(Array[String]())
explícitamente para ambos casos.
Este sencillo consejo será útil para principiantes como yo.