2011-02-14 9 views

उत्तर

13

अभी, नहीं, ऐसा करने का कोई तरीका नहीं है।

class Hider { 
    private[this] var xHidden: Int = 0 
    def x = xHidden 
    private def x_=(x0: Int) { xHidden = x0 } 
} 

अब कक्षा में ही केवल एक है जो अंतर्निहित क्षेत्र xHidden में हेरफेर कर सकते हैं, जबकि कक्षा के अन्य उदाहरण सेटर विधि का उपयोग कर सकते हैं:

आप निम्न तीन लाइन समाधान करने के लिए सीमित कर रहे हैं और हर कोई गेटर विधि देख सकता है।

यदि आप अलग-अलग नामों का उपयोग करने में कोई फर्क नहीं पड़ता है, तो आप केवल var निजी बना सकते हैं और सेटर (दो पंक्तियां) भूल सकते हैं।

कोई "var to me, val to them" कीवर्ड नहीं है।

+0

क्या स्कैला समुदाय में चर्चा की गई इस तरह की खोजशब्द की संभावना थी? –

+3

@ लुकसज़ - जब तक मैं सुन रहा हूं, नहीं, जहां मैं सुन रहा हूं। (मैं हर जगह नहीं सुनता और मैं हमेशा के लिए चारों ओर नहीं रहा हूं।) लेकिन मुझे संदेह है कि इसे अधिक पक्ष नहीं मिलेगा, क्योंकि भाषा परिभाषा को कम रखने पर जोर दिया जाता है (यानी कुछ विशेष मामले, भले ही आपके द्वारा किए गए मामलों में आपको बड़ी अभिव्यक्ति शक्ति मिलती है), और उत्परिवर्तनीय लोगों पर अपरिवर्तनीय समाधान के पक्ष में। –

3

आप की तरह कुछ कर सकता है:

class Test { 
    private var myprivatevar = "" 

    def publicvar = myprivatevar 
} 

अन्य वर्गों से, आप केवल publicvar का उपयोग करने में सक्षम होगा और क्योंकि वहां कोई publicvar_= विधि, आप बाहर से इसे करने के लिए नहीं सौंप सकते।

+0

क्या आप कहना चाहते हैं कि इसे एक संशोधक के साथ करना संभव नहीं है? –

+0

इसके अलावा आपके समाधान में मुझे var और def के लिए अलग-अलग नामों के साथ आना है, है ना? –

+0

आप नाम का पुन: उपयोग नहीं कर सकते (मेरे मामले में, 'myprivatevar') क्योंकि स्कैला स्पष्ट रूप से एक (इस मामले में, निजी) गेटटर और चर के लिए सेटटर बनाता है; यदि आप 'def myprivatevar = this.myprivatevar' करने का प्रयास करते हैं तो आपको एक नाम टकराव मिलेगा क्योंकि विधि को दो बार परिभाषित किया गया है। – andri

-1

आप निश्चित रूप से कुछ var बनाते हैं और फिर इसे क्षेत्र को परिभाषित करने वाले वर्ग के लिए निजी बनाते हैं।

scala> class Holder(private var someValue: String) {  
    | def getValueOfOther(other: Holder) = other.someValue 
    | def combinedWith(holder: Holder) = new Holder(holder1.someValue + " " + holder2.someValue) 
    | def value = someValue 
    | } 
defined class Holder 

scala> val holder1 = new Holder("foo")             
holder1: Holder = [email protected] 

scala> val holder2 = new Holder("bar")             
holder2: Holder = [email protected] 

scala> holder2.getValueOfOther(holder1)             
res5: String = foo 

scala> val holder3 = holder1 combinedWith holder2 
holder3: Holder = [email protected] 

scala> holder3.value 
res6: String = foo bar 
संबंधित मुद्दे

 संबंधित मुद्दे