2012-01-31 18 views

उत्तर

17

आप App विशेषता का उपयोग कर रहे हैं, तो आप main विधि ओवरराइड करने के लिए की जरूरत नहीं है - बस object के शरीर में अपने कोड लिखने:

object Main extends App { 
    val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r 

    println(NameTemplate) 

    val NameTemplate(name, version) = args(0) 

    println(name + " v" + version) 

} 

यह काम करता है क्योंकि App विशेषता DelayedInit विशेषता है जो फैली बहुत विशेष प्रारंभिक प्रक्रिया। उदाहरण के अनुसार, आप args के साथ भी तर्कों तक पहुंच सकते हैं। intialisation का पुनर्लेखन

object Main { 
    val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r 

    def main(args: Array[String]) { 
     println(NameTemplate) 

     val NameTemplate(name, version) = args(0) 

     println(name + " v" + version) 
    } 

} 
6

DelayedInit विशेषता (जो App फैली) का कारण बनता है:

तुम अब भी main विधि लिखने के लिए अगर आप App विस्तार करने के लिए नहीं करना चाहते हैं की जरूरत है, लेकिन इस मामले में यह अपेक्षा के अनुरूप काम करेंगे एक विशेष delayedInit() विधि के भीतर निष्पादित करने के लिए कोड। इसके बाद इसे सामान्यतः main द्वारा बुलाया जाएगा। चूंकि आप main ओवरराइड कर रहे हैं, हालांकि, delayedInit() कोड कभी भी नहीं बुलाया जा रहा है, और इस तरह आपका मान प्रारंभ नहीं किया जा रहा है।

जैसा कि @ टेंशी बताते हैं, आप App को विस्तारित करके या अपने मुख्य कोड को Main ऑब्जेक्ट के शरीर में स्थानांतरित करके इसे प्राप्त कर सकते हैं।

संबंधित मुद्दे