Dalam kasus tugas Apache Spark, dokumentasi menyatakan "bahwa aplikasi harus menetapkan metode main () daripada memperluas scala.App. Subkelas scala.App mungkin tidak bekerja dengan benar."
leo9r
Jawaban:
64
Sifat Aplikasi adalah cara mudah untuk membuat program skala yang dapat dieksekusi. Perbedaan dengan metode altenatif utama adalah (terlepas dari perbedaan sintaksis yang jelas) bahwa sifat Aplikasi menggunakan fitur initalisasi tertunda.
Objek yang mewarisi sifat Aplikasi malah menggunakan fitur inisialisasi tertunda Scala 2.9 untuk mengeksekusi seluruh isi sebagai bagian dari metode utama yang diwariskan.
Fitur baru lainnya dari skema Aplikasi adalah argumen baris perintah sekarang dapat diakses melalui nilai argumen (yang diwarisi dari App sifat)
Apakah saya benar dalam pemahaman saya bahwa tanpa manfaat dari sifat Aplikasi, objek (Aplikasi) ini tidak bertindak seperti objek skala lainnya - di mana titik masuknya adalah mainmetode dan badan tidak dieksekusi seperti yang diharapkan. Apakah itu dieksekusi di beberapa titik setelah masuk ke utama?
Richard Sitze
@RichardSitze Ada mainmetode di mana Apppenyihir bisa dicampur ke Applicationobjek Anda . Tidak ada keajaiban yang terjadi di luar fakta bahwa inisialisasi yang tertunda adalah yang mengeksekusi tubuh Applicationobjek Anda .
Emil H
4
Kedua kasus ini tidak sama pada skrip scala.
object extends App" scala MyObject.scala" tidak dieksekusi oleh perintah " ", tetapi objek yang berisi metode utama dieksekusi dengan scala MyObject.scalaperintah " ". Yang digambarkan sebagai scala mencari objek dengan metode utama untuk pembuatan skrip.
Saat menggunakan REPL atau scala workseet dari Eclipse, perlu memanggil MyObject.main(Array[String]())secara eksplisit untuk kedua kasus.
Tip sederhana ini bermanfaat bagi pemula seperti saya.
Sifat aplikasi diimplementasikan menggunakan fungsionalitas [[DelayedInit]], yang berarti bahwa bidang objek tidak akan diinisialisasi sebelum metode utama dijalankan.
Jawaban:
Sifat Aplikasi adalah cara mudah untuk membuat program skala yang dapat dieksekusi. Perbedaan dengan metode altenatif utama adalah (terlepas dari perbedaan sintaksis yang jelas) bahwa sifat Aplikasi menggunakan fitur initalisasi tertunda.
Dari catatan rilis untuk 2.9 (lihat http://www.scala-lang.org/old/node/9483 )
sumber
main
metode dan badan tidak dieksekusi seperti yang diharapkan. Apakah itu dieksekusi di beberapa titik setelah masuk ke utama?main
metode di manaApp
penyihir bisa dicampur keApplication
objek Anda . Tidak ada keajaiban yang terjadi di luar fakta bahwa inisialisasi yang tertunda adalah yang mengeksekusi tubuhApplication
objek Anda .Kedua kasus ini tidak sama pada skrip scala.
object extends App
"scala MyObject.scala
" tidak dieksekusi oleh perintah " ", tetapi objek yang berisi metode utama dieksekusi denganscala MyObject.scala
perintah " ". Yang digambarkan sebagai scala mencari objek dengan metode utama untuk pembuatan skrip.Saat menggunakan REPL atau scala workseet dari Eclipse, perlu memanggil
MyObject.main(Array[String]())
secara eksplisit untuk kedua kasus.Tip sederhana ini bermanfaat bagi pemula seperti saya.
sumber
Sifat aplikasi diimplementasikan menggunakan fungsionalitas [[DelayedInit]], yang berarti bahwa bidang objek tidak akan diinisialisasi sebelum metode utama dijalankan.
sumber