मैं अब गहराई में स्कैला पढ़ रहा हूं। यहां पुस्तक से एक अंश दिया गया है:पथ-निर्भर प्रकार प्रकार अनुमान हैं?
सभी पथ-निर्भर प्रकार प्रकार अनुमान हैं। एक रास्ता निर्भर प्रकार
foo.Bar
foo.type#Bar
संकलक द्वारा के रूप में ...स्काला में फिर से लिखा है, सभी प्रकार के संदर्भ नामित संस्थाओं के खिलाफ परियोजनाओं के रूप में लिखा जा सकता है। टाइप scala.String
scala.type#String
के लिए शॉर्टेंड है जहांscala
नामscala
पैकेज को संदर्भित करता है औरString
टाइपString
वर्ग स्केल पैकेज पर परिभाषित किया गया है।
जाहिर है, वहाँ scala.String
वर्ग नहीं है, लेकिन मैं Null
के साथ इस पुन: पेश करने में विफल रहा है।
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
तो, मेरे प्रश्न इस प्रकार हैं। क्या पथ-निर्भर प्रकार अनुमान अनुमान हैं? क्या यह सिर्फ आंतरिक कंपाइलर प्रतिनिधित्व है या स्कैला कोड में व्यक्त किया जा सकता है?
लेकिन एसएलएस §3.1 के अनुसार एक पथ निम्न में से एक है ... p.x जहां पी पथ है और एक्स पी का एक स्थिर सदस्य है। स्थिर सदस्य पैकेज या ... एक स्थिर पहचान एक पथ है जो एक पहचान में समाप्त होता है। 'Scala.Null' स्थिर पहचानकर्ता है। सही? – 4e6
नहीं, सभी स्थिर पहचानकर्ता मूल्य या पैकेज हैं: 'scala.Null' एक प्रकार को मान नहीं देता है। 'स्कैला' एक स्थिर पहचानकर्ता है, लेकिन जैसा कि आपने देखा है, किसी ऑब्जेक्ट के बजाए पैकेज होने के नाते, इसका व्यवहार ऑपरेटर '.type' में बना सिंगलटन प्रकार को लिखता है जो कि मेरे उत्तर में दिए गए उदाहरण' foo' से अलग है। –
ओह, अब, आखिर में, मैं इसे '.type' व्यवहार के बारे में सब कुछ देखता हूं। इसे समझने में इतना समय लगा। बहुत बहुत धन्यवाद :) – 4e6