2013-08-25 3 views
17

का पहला तत्व प्राप्त करें queue.get() वापस empy सूची क्यों?स्कैला। सूची

class MyQueue{ 
    var queue=List[Int](3,5,7) 

    def get(){ 
    this.queue.head 
    } 
} 

object QueueOperator { 
    def main(args: Array[String]) { 
    val queue=new MyQueue 
    println(queue.get()) 
    } 
} 

मैं पहला तत्व कैसे प्राप्त कर सकता हूं?

+3

जब आप सीख रहे हों, तो आपको आवश्यकतानुसार अधिक प्रकार से स्पष्ट रूप से लिखना उपयोगी हो सकता है। इस मामले में, यदि आप 'def get(): int {this.queue.head} लिखा था, तो कंपाइलर ने आपको बताया होगा कि' get' विधि के साथ कोई समस्या थी। –

उत्तर

24

यह खाली सूची नहीं लौटा रहा है, यह Unit (शून्य-टुपल) लौटा रहा है, जो स्कैला जावा में void के बराबर है। यदि यह खाली सूची लौटा रहा है तो आप () (नलरी टुपल) की बजाय कंसोल पर मुद्रित देखेंगे।

समस्या यह है कि आप अपने get विधि के लिए गलत वाक्यविन्यास का उपयोग कर रहे हैं। आप संकेत मिलता है कि get एक मान देता है एक = उपयोग करने की आवश्यकता:

def get() = { 
    this.queue.head 
} 

या यह शायद और भी बेहतर है:

def get = this.queue.head 

स्काला में आप आमतौर पर nullary कार्यों के लिए कोष्ठक (पैरामीटर सूची) को बंद रखना होगा जिसका कोई दुष्प्रभाव नहीं है, लेकिन जब आप queue.get पर कॉल करते हैं तो आपको ब्रांड्स को बंद करने की आवश्यकता होती है।

आप Scala Style Guide पर विशेष रूप से section on methods पर एक त्वरित नज़र डालना चाहते हैं।

+3

ऐसी गलतियों के कारण, पूर्ण रूप से 'def proc (...): इकाई = {...}' के पक्ष में प्रक्रिया वाक्यविन्यास 'def proc (...) {...} 'को हटाने के बारे में चल रही चर्चा चल रही है। । Https://groups.google.com/forum/?fromgroups=#!topic/scala-debate/8G3WgfZNj9E – ghik

2

कभी कभी यह उपयोग करने के लिए

ले 1

सिर के बजाय नहीं करता है, क्योंकि यह खाली सूची में एक अपवाद के कारण और फिर एक खाली सूची देता है अच्छा हो सकता है।

+7

'हेडऑप्शन' बेहतर है, क्योंकि यह किसी भी जादू स्थिरांक (1) का उपयोग नहीं करता है, और यह एक प्रकार देता है ('विकल्प [टी]') जो स्थिर रूप से अधिकतम आकार 1 होने की गारंटी है। –

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