के बजाय निजी [यह] का उपयोग करने के कारण व्यवहार में अप्रत्याशित अंतर प्रतीत होता है ये दो वर्ग अलग-अलग व्यवहार करते हैं; कारण 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