2015-08-21 10 views
12

के बजाय निजी [यह] का उपयोग करने के कारण व्यवहार में अप्रत्याशित अंतर प्रतीत होता है ये दो वर्ग अलग-अलग व्यवहार करते हैं; कारण private के बजाय private[this] घोषणा के उपयोग से संबंधित प्रतीत होता है। क्या कोई समझा सकता है, कृपया?निजी

  • private:

    class Person(
        private var _age: Int 
    ) { 
        if (_age < 0) { _age = 0 } 
    
        def age = _age 
        def age_=(newAge: Int) { 
        if (newAge > _age) { _age = newAge } 
        } 
    } 
    

    आरईपीएल में, यह बर्ताव करता है के रूप में मैं दोनों वर्गों के लिए उम्मीद कर रहा था; जो है, age विधि हो जाता है _age है, जो निर्माण के दौरान उचित मान पर सेट कर दिया गया है

    scala> val person = new Person(-1) 
    person: Person = [email protected] 
    
    scala> person.age 
    res0: Int = 0 
    
  • private[this]:

    class Person(
        private[this] var _age: Int 
    ) { 
        if (_age < 0) { _age = 0 } 
    
        def age = _age 
        def age_=(newAge: Int) { 
        if (newAge > _age) { _age = newAge } 
        } 
    } 
    

    आरईपीएल में, person.age_age पहले का मूल्य लेने के लिए प्रकट होता है if अभिव्यक्ति के मूल्यांकन के लिए। यह काम करता है, सेटर का उपयोग कर, हालांकि बाद अपेक्षा के अनुरूप:

    scala> val person = new Person(-1) 
    person: Person = [email protected] 
    
    scala> person.age 
    res0: Int = -1 
    
    scala> person.age = 0 
    person.age: Int = 0 
    
    scala> person.age 
    res1: Int = 0 
    

उत्तर

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