2015-08-21 8 views
12

Bu iki sınıf farklı davranır; Nedeni, bir private yerine private[this] bildiriminin kullanımıyla ilişkili görünüyor. Birisi nedenini açıklayabilir mi lütfen?Görünüşe göre davranışta beklenmedik bir fark özel görünmek yerine özel [bu] özel

  • private: ben hem sınıflar için bekliyordum olarak repl olarak

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

    , bu davranır;

    scala> val person = new Person(-1) 
    person: Person = [email protected] 
    
    scala> person.age 
    res0: Int = 0 
    
  • private[this]: yani, age yöntem yapımı sırasında uygun değere ayarlandı _age alır, Çoğaltma olarak

    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 önce _age değerini alır gibi görünmektedir if ifadesinin değerlendirilmesine. olsa ayarlayıcı kullandıktan sonra beklendiği gibi çalışır:

    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 
    

cevap

İlgili konular