-explain-types
चेक को सबटाइप करने के लिए सभी कॉल का पता लगाता है। इंडेंटेशन का उपयोग रिकर्सिव कॉल दिखाने के लिए किया जाता है।
यहां एक छोटा उदाहरण है:
scala210 -explaintypes -e '0 : java.lang.String'
scalacmd9062993631372828655.scala:1: error: type mismatch;
found : Int(0)
required: java.lang.String
0 : java.lang.String
^
one error found
Int(0) <: java.lang.String?
Int <: java.lang.String?
<notype> <: java.lang.String?
false
false
false
प्रत्यावर्तन के तीन स्तर हैं। पहला कॉल यह जांच रहा है कि UniqueConstantType(0) <:< UniqueTypeRef(String)
है या नहीं। एलएचएस शाब्दिक पूर्णांक के लिए एक सिंगलटन प्रकार है। चेक considering उस सिंगलटन प्रकार UniqueTypeRef(Int) <:< UniqueTypeRef(String)
के अंतर्निहित प्रकार से जारी है।
अनुरूपता की जांच तो searches वर्ग String
(base type) की Int
के महाप्रकार के लिए, और उसके बाद पता चल सके कि इस String
के अनुरूप है। ऐसा कोई सुपरटेप नहीं है, इसलिए NoType
वापस कर दिया गया है। <:<
पर रिकर्सिव कॉल आउटपुट <notype> <: java.lang.String
की ओर जाता है।
sym2.isClass && {
val base = tr1 baseType sym2 // UniqueTypeRef(Int) baseType String => NoType
(base ne tr1) && base <:< tr2
}
NoType
एक शून्य ऑब्जेक्ट है। (कंपाइलर NoSymbol
, NoPosition
) के लिए इस पैटर्न का भी उपयोग करता है।
यह इस आउटपुट को ट्रिगर करने वाले कोड का एक छोटा स्निपेट शामिल करने में मदद करेगा। – retronym