में एक आंतरिक वर्ग के प्रकार का जिक्र करते हुए निम्नलिखित कोड की नकल करने की कोशिश करता है: Inner
में व्यवहार देने के बजाय, यह useInner
में अपनी संलग्न कक्षा के तरीके को एन्कोड किया गया है। मैंने enclosing
विधि जोड़ा ताकि उपयोगकर्ता को केवल Inner
उदाहरणों का संदर्भ रखना पड़े, लेकिन हमेशा उनका संलग्न उदाहरण प्राप्त हो सकता है। ऐसा करके, सभी Inner
एक विशिष्ट Outer
उदाहरण से उदाहरण केवल एक व्यवहार से बंधे हैं (लेकिन यह यहां चाहता था)।स्कैला
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
यह संकलन नहीं है और स्केला 2.8 के बारे में शिकायत:
type mismatch; found: sandbox.Outer#Inner
required: _81.Inner where val _81:sandbox.Outer
Programming Scala: Nested classes और A Tour of Scala: Inner Classes से, मुझे लगता है समस्या यह है कि तर्क के रूप में useInner
उम्मीद एक विशिष्ट Outer
उदाहरण से एक Inner
उदाहरण ।
सही स्पष्टीकरण और इस समस्या को हल करने का तरीका क्या है?
क्या यह संभव है उपयोग करने के बजाय Booolean को संशोधित करने के लिए? –
यदि 'def toBoolean (x: y.Inner forSome {val y: Outer}) की कोशिश की गई है: Boolean = x.enclosing.useInner (x) '(मौजूदा प्रकार - स्कैला संदर्भ से मानों पर मौजूदा मात्रा) लेकिन यह नहीं था काम। –