2012-01-20 5 views
9

मैंने स्कैला में पुनरावृत्तियों को क्रमबद्ध करने के लिए एक विशेषता लिखी, और कक्षा बनाने के लिए लगभग इतना समय लगा कि मैं इसे लिखने के लिए इसे साथ जोड़ सकता था। क्यों डिज़ाइन निर्णय तरह बातें लिखने से उपयोगकर्ताओं को अस्वीकृत करने के लिए किया गया था:स्केल में सभी बेस अपरिवर्तनीय संग्रह अंतिम या सील क्यों हैं?

new List[Int] with SuperAwesomeTrait[Int]? 

अब अगर मैं ऐसा करना चाहते हैं, मैं कुछ अजीब हैक की तरह

class StupidList extends LinearSeq { 
    val inner = List() 
    /* reimplement list methods by calling into inner */ 
} 

और फिर

ऐसा करने के लिए, की जरूरत है
new StupidList[Int] with SuperAwesomeTrait[Int]. 

उत्तर

9

क्योंकि अगर मैं लिखने

someList match { 
    case Cons(head, tail) => whatever 
    case Nil => somethingElse 
} 

मैं नहीं चाहता कि मेरा तर्क एक नए, अप्रत्याशित उप-वर्ग द्वारा टूटा हुआ हो।

मुझे संदेह है कि आप सबक्लासिंग का उपयोग करके किसी समस्या को हल करने का प्रयास कर रहे हैं जो प्रभाव के साथ बेहतर हल किया जाएगा।

+0

हालांकि एक ही प्रैक्टिस के परिणामस्वरूप मुझे लगभग अनंत बल द्वारा stdlib के अपरिवर्तनीय पिचिंग का परिणाम मिलेगा। विपक्ष, हालांकि एक नई सूची देता है ताकि आप टूटा नहीं जा सके। – Joshua

+0

किसी भी अन्य वर्ग के लिए 'सूची' के लिए यह समस्या क्यों है? –

+2

@ जोशुआ, मुझे नहीं पता कि आप किस बारे में बात कर रहे हैं। मैं कुछ deconstruct करने के लिए पैटर्न मिलान का उपयोग कर रहा हूँ। मैं कुछ भी नहीं बना रहा हूँ। –

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