2012-06-17 19 views
5

मैं सोच रहा था, क्यों किसी भी वैल का उपयोग किसी भी रूप में नहीं किया जा सकता है? इस व्यवहार के पीछे क्या कारण है?किसी भी संस्करण में किसी भी प्रकार का उपयोग क्यों नहीं किया जा सकता है?

scala> val c = 't' 
c: Char = t 

scala> c.isInstanceOf[AnyVal] 
<console>:12: error: type AnyVal cannot be used in a type pattern or isInstanceO 
f test 
      c.isInstanceOf[AnyVal] 
+0

संबंधित: http://stackoverflow.com/questions/10416658 –

+0

मुझे लगता है, यह भी संबंधित है http://www.scala-lang.org/node/3271 –

+0

संभावित डुप्लिकेट [मूल्य पर परीक्षण कैसे करें AnyVal होने के नाते?] (http://stackoverflow.com/questions/10416658/how-to-test-a-value-on-being-anyval) –

उत्तर

11

AnyVal रनटाइम पर अब मौजूद नहीं है। केवल संकलन समय पर। दूसरे शब्दों में, यह जेवीएम प्राइमेटिव्स को प्रथम श्रेणी की वस्तुओं के रूप में मानने के लिए सिर्फ एक संकलक "चाल" है।

हालांकि, isInstanceOf विधि रनटाइम पर निष्पादित की जाती है, इसलिए यह काम नहीं कर सकती है। इसलिए संकलक त्रुटि।

+0

मुझे यकीन नहीं है कि यह बदसूरत या अच्छा है या नहीं। –

+1

ठीक है, 'isInstanceOf' को स्कैला में बदसूरत माना जाता है ;-) आपको संकलन समय पर उस तरह की जानकारी प्राप्त करने के लिए टाइप सिस्टम पर भरोसा करना चाहिए। – paradigmatic

+0

मैं शायद बहुत मोटा हो रहा हूं, लेकिन मुझे इस जवाब के तर्क को समझ में नहीं आता है। आप सामान्य रूप से बुलियन विधियों को अस्वीकार नहीं करते हैं क्योंकि उत्तर हमेशा "झूठा" होता है। और '1.InInstanceOf [Int] 'ठीक काम करता है ... और लिंक किए गए" डुप्लिकेट "के उत्तरों से पता चलता है कि रनटाइम पर ऐसी विधि संभव है। –

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