อะไรคือความแตกต่างระหว่าง
object Application extends App {
println("Hello World")
}
และ
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
อะไรคือความแตกต่างระหว่าง
object Application extends App {
println("Hello World")
}
และ
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
คำตอบ:
ลักษณะของแอปเป็นวิธีที่สะดวกในการสร้างโปรแกรมสกาลาที่ทำงานได้ ความแตกต่างของวิธีการอัลเทนเนทีฟหลักคือ (นอกเหนือจากความแตกต่างทางวากยสัมพันธ์ที่เห็นได้ชัด) ที่ลักษณะของแอพใช้คุณสมบัติการทำให้เกิดความล่าช้า
จากบันทึกประจำรุ่นสำหรับ 2.9 (ดูhttp://www.scala-lang.org/old/node/9483 )
ออบเจ็กต์ที่สืบทอดลักษณะแอปแทนที่จะใช้คุณลักษณะการเริ่มต้นล่าช้าของ Scala 2.9 เพื่อดำเนินการทั้งร่างกายโดยเป็นส่วนหนึ่งของวิธีการหลักที่สืบทอดมา
คุณสมบัติใหม่อีกอย่างของ App Scheme คือตอนนี้อาร์กิวเมนต์บรรทัดคำสั่งสามารถเข้าถึงได้ผ่านค่า args (ซึ่งสืบทอดมาจาก trait App)
mainวิธีการและร่างกายไม่ได้ดำเนินการตามที่คาดไว้ มีการดำเนินการเลยหรือไม่หลังจากเข้าสู่ main?
mainวิธีการหนึ่งในAppลักษณะที่แม่มดผสมอยู่ในApplicationวัตถุของคุณ ไม่มีเวทมนตร์ใดเกิดขึ้นนอกเหนือจากข้อเท็จจริงที่ว่าการเริ่มต้นล่าช้าคือสิ่งที่ดำเนินการกับร่างกายของApplicationวัตถุของคุณ
สองกรณีนี้ไม่เหมือนกันในการเขียนสคริปต์สกาล่า
object extends Appไม่ได้ดำเนินการโดยscala MyObject.scalaคำสั่ง "" แต่อ็อบเจ็กต์ที่มีเมธอดหลักถูกดำเนินการโดยscala MyObject.scalaคำสั่ง "" ซึ่งอธิบายว่าสกาลากำลังมองหาวัตถุด้วยวิธีการหลักในการเขียนสคริปต์
เมื่อใช้ REPL หรือ scala workseet ของ Eclipse จำเป็นต้องเรียกMyObject.main(Array[String]())อย่างชัดเจนสำหรับทั้งสองกรณี
เคล็ดลับง่ายๆนี้เป็นประโยชน์สำหรับผู้เริ่มต้นอย่างฉัน
คุณลักษณะของแอปถูกนำไปใช้โดยใช้ฟังก์ชัน [[DelayedInit]] ซึ่งหมายความว่าช่องของวัตถุจะไม่ได้รับการเตรียมใช้งานก่อนที่วิธีการหลักจะถูกเรียกใช้งาน