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
Post a Comment