मैं छोटा करने के लिए एक प्रकार उर्फ लिखने के लिए करना चाहते हैं सहित उर्फ, अच्छा और स्काला कोड समझाया। मान लीजिए मुझे कुछ संग्रह मिला है जिसमें मानचित्रों की सूची होने की संपत्ति है, जिसका मूल्य tuples हैं। मेरा प्रकार List[Map[Int, (String, String)]]
जैसा कुछ लिखता है, या मेरे आवेदन के रूप में कुछ भी सामान्य है। मैं कल्पना कर सकता था कि सब्सट्रिप Seq[MapLike[Int, Any]]
या जो भी मेरी नाव तैरता है, कंक्रीट सबक्लास अधिक विशिष्ट होने के साथ पूछता है।स्काला प्रकार साथी वस्तु [शुरुआत]
मैं तो इस लंबी प्रकार के लिए एक उपनाम लिखना चाहते हैं चाहते हैं।
class ConcreteClass {
type DataType = List[Map[Int, (String, String)]]
...
}
मैं तो खुशी से ConcreteClass#DataType
का उपयोग हर जगह मैं एक ले जा सकते हैं, और यह प्रयोग करेंगे।
अब मैं एक समारोह
def foo(a : DataType) { ... }
जोड़ने लगता है और मैं इसे बाहर से कॉल करने के लिए एक रिक्त सूची से चाहते हैं। मैं foo(List())
कॉल कर सकते हैं, लेकिन जब मैं Seq
का एक और प्रकार होने के लिए मेरी अंतर्निहित प्रकार परिवर्तित करना चाहते, मैं वापस लौटने और इस कोड भी बदलना होगा। इसके अलावा, यह स्पष्ट नहीं है कि यह खाली सूची DataType
के रूप में है। और साथी ऑब्जेक्ट में List
विधियां नहीं हैं, इसलिए मैं DataType()
, या DataType.empty
पर कॉल नहीं कर सकता। जब मुझे गैर-खाली सूचियों की आवश्यकता होती है तो यह और भी परेशान होने वाला है क्योंकि मुझे इस लंबे प्रकार का एक महत्वपूर्ण हिस्सा लिखना होगा।
वहाँ किसी भी तरह से मैं स्काला पूछ सकते हैं एक ही बात के रूप में मेरे प्रकार, इसके निर्माता के तरीकों के साथ साथी वस्तु सहित समझने के लिए कोड को छोटा करने और यह blackboxing के हित में, है? या, किसी भी कारण से मुझे इसे पहले स्थान पर क्यों नहीं करना चाहिए?
आप 'ConcreteClass' की उपवर्गों का इरादा नहीं है, तो' ओवरराइड करने के लिए DataType', तो आप बेहतर हो सकता है (साथी वस्तु में दोनों 'type' और' val' उपनाम डाल बजाय कक्षा में एक होने के)। इस प्रकार 'स्कैला' पैकेज ऑब्जेक्ट में उपनाम कैसे काम करते हैं। –
आप वास्तव में बहुत सही हैं। मैं अब से यह करूँगा। धन्यवाद। – Jean
डी को छोड़कर सूची सूची [कुछ भी नहीं] – sourcedelica