W przypadku zadań Apache Spark dokumentacja stwierdza, że „aplikacje powinny zdefiniować metodę main () zamiast rozszerzania scala.App. Podklasy scala.App mogą nie działać poprawnie”.
leo9r
Odpowiedzi:
64
Cecha aplikacji to wygodny sposób tworzenia wykonywalnego programu w formacie Scala. Różnica w stosunku do głównej metody alternatywnej polega na tym (poza oczywistymi różnicami składniowymi), że cecha aplikacji korzysta z funkcji opóźnionej inicjalizacji.
Obiekty dziedziczące cechę App zamiast tego wykorzystują funkcję opóźnionej inicjalizacji Scala 2.9, aby wykonać całe ciało jako część dziedziczonej metody głównej.
Kolejną nową funkcją schematu aplikacji jest to, że argumenty wiersza poleceń są teraz dostępne za pośrednictwem wartości args (która jest dziedziczona z cechy App)
Czy mam rację, rozumiejąc, że bez korzyści z cechy App ten obiekt (Application) nie działa jak każdy inny obiekt scala - w tym sensie, że punktem wejścia jest mainmetoda, a treść nie jest wykonywana zgodnie z oczekiwaniami. Czy jest w ogóle wykonywany w pewnym momencie po wejściu do main?
Richard Sitze
@RichardSitze Cecha, która jest mieszana z twoim obiektem, zawiera mainmetodę . Nie ma żadnej magii poza faktem, że opóźniona inicjalizacja jest tym, co wykonuje ciało twojego obiektu. AppApplicationApplication
Emil H
4
Te dwa przypadki nie są takie same w skryptach Scala.
object extends Appnie został wykonany scala MyObject.scalapoleceniem " ", ale obiekt zawierający metodę główną został wykonany scala MyObject.scalapoleceniem " ". Który został opisany jako scala szukający obiektu z główną metodą do skryptowania.
Podczas korzystania z REPL lub zestawu zadań Scala Eclipse należy wywołać MyObject.main(Array[String]())jawnie w obu przypadkach.
Ta prosta wskazówka może być pomocna dla początkujących, takich jak ja.
Cecha aplikacji jest implementowana przy użyciu funkcjonalności [[DelayedInit]], co oznacza, że pola obiektu nie zostaną zainicjowane przed wykonaniem metody głównej.
Odpowiedzi:
Cecha aplikacji to wygodny sposób tworzenia wykonywalnego programu w formacie Scala. Różnica w stosunku do głównej metody alternatywnej polega na tym (poza oczywistymi różnicami składniowymi), że cecha aplikacji korzysta z funkcji opóźnionej inicjalizacji.
Z informacji o wydaniu 2.9 (zobacz http://www.scala-lang.org/old/node/9483 )
źródło
main
metoda, a treść nie jest wykonywana zgodnie z oczekiwaniami. Czy jest w ogóle wykonywany w pewnym momencie po wejściu do main?main
metodę . Nie ma żadnej magii poza faktem, że opóźniona inicjalizacja jest tym, co wykonuje ciało twojego obiektu.App
Application
Application
Te dwa przypadki nie są takie same w skryptach Scala.
object extends App
nie został wykonanyscala MyObject.scala
poleceniem " ", ale obiekt zawierający metodę główną został wykonanyscala MyObject.scala
poleceniem " ". Który został opisany jako scala szukający obiektu z główną metodą do skryptowania.Podczas korzystania z REPL lub zestawu zadań Scala Eclipse należy wywołać
MyObject.main(Array[String]())
jawnie w obu przypadkach.Ta prosta wskazówka może być pomocna dla początkujących, takich jak ja.
źródło
Cecha aplikacji jest implementowana przy użyciu funkcjonalności [[DelayedInit]], co oznacza, że pola obiektu nie zostaną zainicjowane przed wykonaniem metody głównej.
źródło