enums - How to add reusable field to Scala Enumeration? -
मैं Scala के एक कस्टम फ़ील्ड के साथ Enumeration
के कार्यान्वयन का विस्तार करना चाहता हूं, label
। वह नया फ़ील्ड उस गणन के मूल्यों
के माध्यम से पहुंच योग्य होना चाहिए इसके अलावा, यह कस्टम फ़ील्ड गणन
के विभिन्न कार्यान्वयन का हिस्सा होना चाहिए।
मुझे स्टैक्सवर्फ फ़्लो पर निम्नलिखित प्रश्नों से अवगत हैं:
- हालांकि>
हालांकि, उनमें से कोई भी मेरे मुद्दों को हल नहीं करता है:
पहला मुद्दा है कि मैं कस्टम फ़ील्ड को जोड़ने में सक्षम हूं। हालांकि, मैं मान
द्वारा Enumeration.values
द्वारा वापस आ गया है, उस अतिरिक्त क्षेत्र तक नहीं पहुंच सकता। निम्न कोड काम करता है और प्रिंट करता है दूसरा गणक मान
:
ऑब्जेक्ट MyEnum enumeration का विस्तार {टाइप करें MyEnum = MyVal val VALUE_ONE = MyVal () val VALUE_TWO = MyVal (कुछ (" मूल्य (मूल्य) ")) वैल VALUE_THREE = (कुछ (" तीसरा मूल्य ")) केस वर्ग MyVal (लेबल: विकल्प [स्ट्रिंग] = कोई नहीं) वैल (अगली आयड)} आयात करता है MyEnum._ println आयात करें (VALUE_TWO.label.get)
ध्यान दें कि मैं मूल्यों में से एक के माध्यम से लेबल तक पहुंचता हूं। निम्न कोड काम नहीं करता है:
के लिए (मान & lt; - MyEnum.values) println (value.label)
त्रुटि संदेश निम्नानुसार है : त्रुटि: मान लेबल MyEnum.Value का सदस्य नहीं है
जाहिर है, MyEnum.MyVal
के बजाय, MyEnum.Val उपयोग किया जाता है उत्तरार्द्ध
label
को परिभाषित नहीं करता है, जबकि मेरा कस्टम मान फ़ील्ड label
प्रदान करेगा।
दूसरा मुद्दा यह है कि यह एक कस्टम मान
और वैल
, केवल एक गणन के संदर्भ में
इस प्रकार, जहां तक मुझे पता है, यह संभव है कि इस तरह के एक फ़ील्ड को अलग-अलग ईमानों में उपयोग न करें। कम से कम, निम्न कोड संकलित नहीं होता है:
मामला वर्ग MyVal (लेबल: विकल्प [स्ट्रिंग] = कोई नहीं) एन्यूमरेशन। विस्तार (अगली आयड) ऑब्जेक्ट MyEnum Enumeration {type MyEnum = MyVal val VALUE_ONE = MyVal () वैल VALUE_TWO = (कुछ ("2 एन्यूमरेशन वैल्यू")) ऑब्जेक्ट MySecondEnum की गणना का विस्तार {टाइप करें MySecondEnum = MyVal val VALUE_ONE = MyVal () val VALUE_TWO = MyVal (कुछ ("2 गणना मूल्य"))}
इस तथ्य के कारण कि वर्ग वाल
संरक्षित है, केस वर्ग MyVal
वैल
तक नहीं पहुंच सकता है - MyVal
किसी गणन के संदर्भ में परिभाषित नहीं है।
कोई भी विचार कैसे ऊपर के मुद्दों को हल करने के लिए?
पहला मुद्दा एक हालिया प्रश्न से संबोधित होता है।
उस उपयोग के मामले में, मैं एक कस्टम widgets
विधि लिखूंगा उपयोगी प्रकार के साथ, लेकिन मेरा जुड़ा हुआ उत्तर, जो सिर्फ एक अंतर्निहित रूपांतरण का परिचय देता है, बहुत आसान लगता है।
दूसरे मुद्दे के लिए, आपका व्युत्पन्न MyVal
सिर्फ एक विशेष गुण को लागू करना चाहिए।
नमूना: < / P>
स्कला & gt; लेबल लेबल वाला {def लेबल: विकल्प [स्ट्रिंग]} परिभाषित विशेषता लेबल लेबल & gt; ऑब्जेक्ट ए का विस्तार बढ़ाता है {केस क्लास एए (लेबल: ऑप्शन [स्ट्रिंग]) लेबल के साथ वैल बढ़ाता है; Val X = एए (कुछ ("एक"))} परिभाषित ऑब्जेक्ट एक स्केल & gt; ऑब्जेक्ट बी एक्सफ़ेन्स एन्यूमरेशन {केस क्लास बी (लेबल: ऑप्शन [स्ट्रिंग]) लेबल के साथ वैल बढ़ाता है; Val Y = बीबी (कोई नहीं)} वस्तु परिभाषित वस्तु बी स्केल & gt; वैल लेबल = सूची (एएक्स, बी.वाई।) लेबल: सूची [लेबल के साथ उत्पाद के साथ मान # वैल] = सूची (एक्स, वाई) स्केल & gt; लेबल नक्शा (_.label) res0: सूची [विकल्प [स्ट्रिंग]] = सूची (कुछ (एक), कोई नहीं)
Comments
Post a Comment