मुझे एक वस्तु के निजी आंतरिक वर्गों को उसी ऑब्जेक्ट के तरीकों से एक्सेस करने के बारे में थोड़ा भ्रम है। यहाँ प्रोग्रामिंग से स्काला में मेरे अभ्यास का कोड (पृष्ठों 245-246) है:स्केल ऑब्जेक्ट आंतरिक कक्षाओं और विधियों के साथ निजी दायरा
import Element.elem
abstract class Element {
def contents: Array[String]
def height = contents.length
def width = if(height == 0) 0 else contents(0).length
def above(that: Element): Element = elem(this.contents ++ that.contents)
def beside(that: Element): Element = {
elem(for(
(line1, line2) <- this.contents zip that.contents)
yield line1 + line2)
}
override def toString = contents mkString "\n"
}
object Element {
private class ArrayElement (
val contents: Array[String]
) extends Element
private class LineElement (s: String) extends ArrayElement(Array(s)) {
override def width = s.length
override def height = 1
}
private class UniformElement (
val ch: Character,
override val width: Int,
override val height: Int
) extends Element {
private val line = ch.toString * width
def contents = Array.fill(height)(line)
}
def elem(ss: Array[String]) = new ArrayElement(ss)
def elem(s: String) = new LineElement(s)
def elem(ch: Character, w: Int, h: Int) = new UniformElement(ch, w, h)
}
कोड किताब में के रूप में ही है, लेकिन संकलक तत्व वस्तु के botton से कम तीन def elem()
तरीकों के बारे में शिकायत । त्रुटि का कहना है:
निजी वर्ग ArrayElement
तथापि प्रकार का हिस्सा pis.Code_c10s02_CompositionAndInheritance.Element.ArrayElement के रूप में अपनी को परिभाषित गुंजाइश निकल जाता है, अगर मैं भीतरी वर्गों से private
संशोधक निकालने के लिए, सब कुछ हो जाता है ठीक। यह समाधान नहीं होना चाहिए, ऐसा लगता है कि पुस्तक का यह खंड अनिवार्य रूप से किसी ऑब्जेक्ट के अंदर कक्षाओं को निजीकृत करने के बारे में है। मेरी गलती यहाँ क्या है?
मुझे लगता है कि के बारे में सोचा है कुछ और है और वहाँ तो इस सवाल के अगले भाग आता है: क्यों लौटे प्रकार 'विशिष्ट प्रकार प्रत्येक मामले में और नहीं होने के लिए Element' इस विधि का एक बनाने के लिए प्रयोग किया जाता है की वस्तु? मुझे लगता है कि यह किसी भी तरह से गोपनीयता/प्रचार से संबंधित है लेकिन मुझे बिंदु नहीं मिल सकता है ... क्या इसका कोई वास्तविक अर्थ है या यह एक कंपाइलर क्विर्क है? – noncom
प्रकार निजी है, इसलिए यह अपने परिभाषित क्षेत्र के बाहर दिखाई नहीं दे रहा है। ऐसा लगता है कि आप वास्तव में क्या चाहते हैं एक निजी निर्माता है। – extempore