2015-08-29 11 views
10

स्कैला में बॉक्सड यूनिट और यूनिट के बीच क्या अंतर है? उन्हें फ़ंक्शन के रिटर्न प्रकार के रूप में कब उपयोग किया जाता है? और आरईएफ के साथ उनका रिश्ता क्या है? यहां यूनिट से निपटने के दौरान मुझे मिली मिस्चैच की एक त्रुटि है।स्केल में बॉक्सेड यूनिट बनाम यूनिट

error: java.lang.AssertionError: assertion failed: Can't convert from UNIT to REF(class BoxedUnit) in unit hello.scala at source-/Users/shiyu/Scala/FinalDataFlow/src/print/hello.scala,line-347,offset=13999

उत्तर

11

Unit अनूठा मूल्य () के प्रकार, उच्चारण "इकाई" है।

BoxedUnit एक कार्यान्वयन JVM पर स्काला के विस्तार, () एन्कोड करने के लिए जब यह एक सामान्य संदर्भ में प्रवेश करती है, या अन्यथा Any को सौंपा गया है प्रयोग किया जाता है। आम तौर पर, आपको पहले स्थान पर BoxedUnit के बारे में नहीं सुनना चाहिए, हालांकि यह कुछ उपयोगकर्ता-स्तर सुविधाओं के लिए रिसाव करता है। उदाहरण के लिए ((): Any).getClass().getName() == "scala.runtime.BoxedUnit"

यह कहा गया है कि आपको मिली त्रुटि स्पष्ट रूप से एक संकलक दुर्घटना है, जैसा कि AssertionError द्वारा प्रमाणित है। यह आपके कोड में कोई समस्या नहीं है। आपको शायद report this as a bug होना चाहिए यदि यह पहले से ही बग डेटाबेस में नहीं है।

+0

@srjd क्या होगा यदि मैं किसी भी वैल पर पैटर्न मिलान करने का प्रयास करता हूं जिसमें यूनिट हो सकता है? उदाहरण के लिए मैंने 'केस राइट (यूनिट)' का उपयोग करने की कोशिश की और यह मेल नहीं खाता। मुझे यह पैटर्न मिलान करने वाला कैसे माना जाता है? –

+0

मैं 'केस राइट (anyVal) का उपयोग कर रहा हूं अगर (anyVal == यूनिट || anyVal.isInstanceOf [BoxedUnit])' और यह काम करता है लेकिन मुझे क्लाइंट परिप्रेक्ष्य से थोड़ा बदसूरत लगता है –

+1

'केस राइट (())' । * प्रकार * 'यूनिट 'का अद्वितीय मान'() 'है। * मूल्य * 'यूनिट 'वास्तव में' यूनिट 'वर्ग का सहयोगी वस्तु है, जो'() 'जैसा नहीं है। – sjrd

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