एक परीक्षण के रूप में, मैं इस कोड लिखा है:यदि कोई इंट शून्य नहीं हो सकता है, तो null.asInstanceOf [int] का क्या अर्थ है?
object Ambig extends App {
def f(x:Int ) { println("Int" ) }
def f(x:String) { println("String") }
f(null.asInstanceOf[Int ])
f(null.asInstanceOf[String])
f(null)
}
मैं च की है कि पिछले मंगलाचरण (पर एक त्रुटि प्राप्त करने के लिए उम्मीद कर रहा था), कह रही है कि यह अस्पष्ट था। संकलक इसे स्वीकार कर लिया है, और इस उत्पादन का उत्पादन:
Int
String
String
अब मैं अनुमान है कि इस तथ्य यह है कि इंट एक AnyRef, तो च का ही संस्करण है कि च के लिए काम करता है के साथ क्या करना है (शून्य) एफ है (एक्स: स्ट्रिंग)। लेकिन फिर, यदि कोई इंट शून्य नहीं हो सकता है, तो null.asInstanceOf [int] का क्या अर्थ है? प्रतिलिपि का कहना है कि यह प्रकार का प्रकार है:
scala> :type null.asInstanceOf[Int]
Int
लेकिन मुझे वास्तव में यह नहीं लगता कि यह कैसे काम करता है। सब के बाद, अगर मैं एक इंट करने के लिए एक स्ट्रिंग कास्ट करने के लिए प्रयास करते हैं, सब नरक टूट ढीला:
scala> "foo".asInstanceOf[Int]
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(Unknown Source)
...
पाठ्यक्रम है कि उम्मीद की जा करने के लिए की
- "foo" एक इंट में नहीं बनाया जा सकता। लेकिन न तो शून्य हो सकता है, तो एक इंट काम करने के लिए क्यों खुलता है? संभवतः कुछ रूपों में मुक्केबाजी, लेकिन प्रकार अभी भी इंट है, जो शून्य नहीं हो सकता है ...
मुझे क्या याद आ रही है?
ओह, और आरईपीएल या स्केलप या कुछ जादू कंपाइलर ध्वज या ... का उपयोग करके, मैं इसे अपने आप कैसे समझ सकता हूं? – AmigoNico
एक और समान [प्रश्न] (http://stackoverflow.com/q/8285916/617996) ... – PrimosK
हालिया spec अद्यतन पर एक नज़र डालें https://github.com/scala/scala-dist/pull/20 और https://issues.scala-lang.org/browse/SI-4437 जारी करें, जो पृष्ठभूमि की कुछ कहानी बताता है। यह सी # में 'डिफ़ॉल्ट (टी)' के साथ थोड़ा तुलनीय है, afaik। – soc