อะไรคือความแตกต่างระหว่าง
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]] ซึ่งหมายความว่าช่องของวัตถุจะไม่ได้รับการเตรียมใช้งานก่อนที่วิธีการหลักจะถูกเรียกใช้งาน