3

我确实理解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)它不被调用时它如何设置一个新值。

4

1 回答 1

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

于 2013-03-16T23:17:39.543 回答