95 votes

Différence entre l'utilisation du trait App et la méthode main en scala

Quelle est la différence entre

object Application extends App {
   println("Hello World")
}

y

object Application {
    def main(args: Array[String]): Unit = {
        println("Hello World");
    }
}

66voto

Emil H Points 3199

Le trait App est un moyen pratique de créer un programme scala exécutable. La différence avec la méthode principale altenative est (en dehors des différences syntaxiques évidentes) que le trait App utilise la fonction d'initalisation retardée.

D'après les notes de mise à jour de la version 2.9 (cf. http://www.scala-lang.org/old/node/9483 )

Les objets qui héritent du trait App utilisent plutôt la fonction d'initialisation retardée de Scala 2.9 pour exécuter l'ensemble du corps dans le cadre d'une méthode main héritée.

Une autre nouveauté du schéma App est que les arguments de ligne de commande sont maintenant accessibles via la valeur args (qui est héritée du trait App).

4voto

Taewon Points 109

Ces deux cas ne sont pas les mêmes sur le scripting scala.

object extends App n'a pas été exécuté par " scala MyObject.scala commande ", mais l'objet contenant la principal a été exécutée par " scala MyObject.scala commande ". Ce qui a été décrit comme un scala cherchant un objet avec une méthode principale pour le scripting.

Lorsque vous utilisez le REPL ou le workseet scala d'Eclipse, vous devez appeler MyObject.main(Array[String]()) explicitement pour les deux cas.

Cette astuce simple est utile pour les débutants comme moi.

0voto

a-herch Points 30

Le trait App est implémenté en utilisant la fonctionnalité [[DelayedInit]], ce qui signifie que les champs de l'objet n'auront pas été initialisés avant l'exécution de la méthode main.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X