attr_accessor或自定义方法重复方法名称混淆

时间:2013-03-16 23:09:28

标签: ruby attr-accessor

我明白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)时它如何设置一个新值。

1 个答案:

答案 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