我明白Ruby支持短手风格的调用方法,即:1.+(2)
与1+2
相同(我仍然认为它与我的情况有关),但我真的很困惑为什么attr_accessor
方法既不重复(嗯,它们不应该是,因为writer
与其名称中的=
不同),也不一致(除了writer
需要参数)在活动对象外访问它们。
我的问题包含在此代码中(在第二条评论中)
class Test
def initialize(number)
@number = number
end
def number
@number
end
def number=(n)
@number = n
end
end
t = Test.new(12)
puts t.number # => 12
t.number = 13 # Why does it do what t.number=(13) should do
puts t.number # => 13
我想知道为什么t.number = 13
有效,当它指向一个只应该返回一个数字的方法,而且如果不调用t.number=(13)
时它如何设置一个新值。
答案 0 :(得分:1)
t.number = 13
只是t.number=(13)
的简写,它们实际上与Ruby中的语句相同。
attr_accessor :b
创建了以下两种方法的等价物:
def b
@b
end
def b=(new_val)
@b = new_val
end
因此,在您的代码示例中,您可以将#number
和#number=
两种方法替换为attr_accessor :number