Project

General

Profile

Bug #10967

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

The following code ... 

 ```ruby ``` 
 class Y 
   def initialize 
     @x = "ZOMG" 
   end 

   def print_x 
     puts x 
   end 

   private 

   attr_reader :x 
 end 

 Y.new.print_x 
 ``` 

 outputs ... 

 ``` 
 test.rb:12: warning: private attribute? 
 ``` 

 I tend to think this warning is wrong, I was surprised by https://github.com/rack/rack/pull/811 and I think this is a completely valid use case. 

 Also this code ... 

 ```ruby ``` 
 class Y 
   def initialize 
     @x = "ZOMG" 
   end 

   def print_x 
     puts x 
   end 

   def assign_x 
     self.x = "ZOMG ZOMG" 
   end 

   private 

   attr_accessor :x 
 end 

 y = Y.new 
 y.assign_x 
 y.print_x 
 ``` 

 Works fine with warnings also. So a private writer works ok when the receiver is `self` because Ruby has a special case for it, this make me think that private writers were thought to be used. 

 So ... am I wrong thinking that the warning should be removed or the self special case shouldn't work and be removed from Ruby code?. It doesn't make sense to me to have both things.

Back