मैं एक स्ट्रिंग के लिए किसी भी प्रकार से एक अंतर्निहित रूपांतरण (जैसे कि, इंट) बनाने के लिए कोशिश कर रहा हूँ में निहित डीईएफ़ अस्पष्टता से बचना ...स्काला
स्ट्रिंग के लिए एक अंतर्निहित रूपांतरण का मतलब RichString विधियों (रिवर्स) की तरह उपलब्ध नहीं हैं ।
implicit def intToString(i: Int) = String.valueOf(i)
100.toCharArray // => Array[Char] = Array(1, 0, 0)
100.reverse // => error: value reverse is not a member of Int
100.length // => 3
RichString के लिए एक अंतर्निहित रूपांतरण का मतलब स्ट्रिंग तरीकों (toCharArray की तरह) उपलब्ध
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.reverse // => "001"
100.toCharArray // => error: value toCharArray is not a member of Int
100.length // => 3
नहीं हैं दोनों अंतर्निहित रूपांतरण का उपयोग डुप्लिकेट किए गए तरीकों का मतलब है (लंबाई) की तरह अस्पष्ट हैं।
implicit def intToString(i: Int) = String.valueOf(i)
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.toCharArray // => Array[Char] = Array(1, 0, 0)
100.reverse // => "001"
100.length // => both method intToString in object $iw of type
// (Int)java.lang.String and method intToRichString in object
// $iw of type (Int)scala.runtime.RichString are possible
// conversion functions from Int to ?{val length: ?}
इसलिए, यह परोक्ष स्ट्रिंग में बदलने के लिए और अभी भी सभी स्ट्रिंग और RichString तरीकों का समर्थन संभव है?
ऐसा लगता है कि 'इसे चूसना' सबसे अच्छा विकल्प है। स्काला में एपीआई डिज़ाइन एपीआई उपभोक्ता होने की तुलना में काफी कठिन है। मैं एक डेटाटाइप बनाना चाहता था जो एक मूल्य लपेटता है और एपीआई उपयोगकर्ता डेटाटाइप का इलाज करने की अनुमति देता है जैसे कि यह इंटर्न वाले मूल्य का प्रकार था। जैसे यदि यह एक इंट लपेटता है, तो वस्तु को एक int की तरह व्यवहार करें। बाहर निकलना यह बहुत मुश्किल है। मैं अपने डेटा-प्रकार सहायक तरीकों देने पर विचार कर रहा हूँ: प्रकार टी वैल internedValue: टी डीईएफ़ एस = internedValue.asInstanceOf [स्ट्रिंग] डीईएफ़ i = internedValue.asInstanceOf [इंट] ... आदि – Synesso
पसंद करते हैं '(100: स्ट्रिंग)। लम्बाई, क्योंकि यह टाइप-सुरक्षित है, जबकि 'asInstanceOf' नहीं है। इसके अलावा, यह सुंदर और छोटा है। –
न केवल वह, लेकिन जैसा कि इंस्टेंसऑफ कभी यहां काम नहीं करेगा, क्योंकि यह केवल डाउनकास्टिंग (जो यहां असफल होने के लिए बाध्य है) है और किसी भी अंतर्निहित रूपांतरण को बंद नहीं करेगा। दूसरे शब्दों में '100.asInstanceOf [स्ट्रिंग]। लम्बाई हमेशा 'क्लासकास्टएक्सप्शन' –