2012-06-22 16 views
8

के साथ काम नहीं कर रहा है जब मैं स्केल App विशेषता का उपयोग करता हूं, तो मुझे काम करने के लिए println नहीं मिल सकता है।स्कैला प्रिंटल ऐप विशेषता

यह सरल उदाहरण प्रिंट के रूप में उम्मीद,

object HelloWorld { 
    def main(args: Array[String]) { 
    println("Hello, world!") 
    } 
} 

लेकिन एक बार मैं विशेषता परिचय ऐसा नहीं होता,

object HelloWorld extends App { 
    println("Hello, world!") 
} 

मैं कोई त्रुटि लेकिन सांत्वना के लिए कुछ भी प्रिंट प्राप्त।

उत्तर

10

क्या आपने इसे पहले संकलित किया था (स्केलैक HelloWorld.scala चल रहा है)? यह टिप्पणी देखें: http://www.scala-lang.org/node/9483#comment-40627

अधिक स्पष्टीकरण जोड़ने के लिए संपादित: पहला संस्करण वास्तव में संकलित किया गया था। एक स्पष्ट मुख्य विधि के बिना स्कैला फ़ाइलों को स्क्रिप्ट के रूप में असम्पीडित चलाया जाता है। इसका मतलब है कि आपके दूसरे संस्करण के लिए, फ़ाइल में कमांड अनुक्रमिक रूप से चलाए जाते हैं, भले ही उन्हें दुभाषिया में प्रवेश किया गया हो - इसलिए, ऑब्जेक्ट हैलोवर्ल्ड बनाया गया है, लेकिन उस पर कोई विधि नहीं कहा जाता है। वहाँ एक पटकथा भाषा यहाँ के रूप में स्काला बारे में अधिक जानकारी है (चरण 5 स्क्रॉल): http://www.artima.com/scalazine/articles/steps.html

+0

अजीब। यह दुभाषिया की एक अजीब सीमा की तरह लगता है। क्या कोई स्पष्टीकरण है कि मुझे इसे काम करने के लिए कक्षा को संकलित करने की आवश्यकता क्यों है? क्या लक्षण सिर्फ दुभाषिया में काम नहीं करते हैं? –

+1

और लक्षण दुभाषिया में काम करते हैं, लेकिन ऐप एक विशेष मामला है। इसे अक्सर "ऐप को अपनी कार्यान्वयन ऑब्जेक्ट के अंदर कोड को मुख्य विधि में लपेटता है," लेकिन यह वास्तव में नहीं है - बल्कि, यह उस कोड को देरी से इंटिट नामक किसी चीज़ में चिपकाता है, जिसे मुख्य विधि को तब कहा जाता है जब मुख्य विधि को बुलाया जाता है ऑब्जेक्ट बनाया जाता है, जो आमतौर पर जब ऑब्जेक्ट घोषणा के अंदर नंगे कोड कहा जाता है। –

+0

आह जो समझ में आता है, स्पष्टीकरण के लिए धन्यवाद। –

5

क्या करना चाहते हैं

object HelloWorld extends App { 
    /* code */ 
} 

HelloWorld.main(args) 
आपकी फ़ाइल के अंत में

कक्षा विधि को परिभाषित करती है लेकिन इसे भी कॉल करने की आवश्यकता है।