我不明白为什么我得到一个零错误.我正确地创建了setter.但它不接受 - =,+ =,或者它自身在=运算符后面.为什么?
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 for nil class puts var var = var - 1 # <<< crash: undefined method for nil class puts var end end a = Test.new a.test
Arup Rakshit.. 5
写为
def test puts var self.var -= 1 puts var self.var = var - 1 puts var end
如果你不使用self
,那么Ruby会将它们var
视为局部变量,而不是setter
方法调用.
请记住,在Ruby 方法中,永远不能在没有接收器(隐式/显式)的情况下进行调用.现在,如果你写var = 1
,Ruby将视为局部变量赋值.但是如果你写的话self.var
,Ruby会将它解析为方法调用,如果你定义的话,会尝试调用你的setter方法.还记得self.var = 1
是一个语法糖的self.var=(1)
.
有关同样的更有趣的讨论,值得一读的私人制定者可以被自己称呼,为什么不吸气?
最近发现一个关于私人制定者的错误.这是Bug票证,它现在也已修复.
写为
def test puts var self.var -= 1 puts var self.var = var - 1 puts var end
如果你不使用self
,那么Ruby会将它们var
视为局部变量,而不是setter
方法调用.
请记住,在Ruby 方法中,永远不能在没有接收器(隐式/显式)的情况下进行调用.现在,如果你写var = 1
,Ruby将视为局部变量赋值.但是如果你写的话self.var
,Ruby会将它解析为方法调用,如果你定义的话,会尝试调用你的setter方法.还记得self.var = 1
是一个语法糖的self.var=(1)
.
有关同样的更有趣的讨论,值得一读的私人制定者可以被自己称呼,为什么不吸气?
最近发现一个关于私人制定者的错误.这是Bug票证,它现在也已修复.