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