ruby - Setter doesn't work with -=, +=, etc? -


this question has answer here:

i don't understand why nil error. created setter properly. not accept -=, +=, or behind = operator. why?

class test   def var; @var || 0; end   def var=(value)     @var = value   end    def initialize     @var = 2.4 # sample value   end    def test     puts var     var -= 1 # <<< crash: undefined method nil class     puts var     var = var - 1 # <<< crash: undefined method nil class     puts var   end end  = test.new a.test 

write as

def test     puts var     self.var -= 1     puts var     self.var = var - 1     puts var end 

if don't use self, ruby treat var local variables, rather setter method calls.

just remember, in ruby method call can never made without receiver(implicit/explicit). if write var = 1, ruby treat local variable assignment. if write self.var, ruby parse method call, , try call setter method, if defined. remember self.var = 1 syntactic sugar of self.var=(1).

there more interesting discussion same, worth read private setters can called self, why not getters?

there recent bug found regarding private setters. here bug ticket, , fixed too.


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -