我确实理解Ruby支持短手风格的调用方法,即: 1.+(2) 与相同 1+2 (我仍然认为这是否与我的情况有关),但我真的很困惑为什么 attr_accessor 方法既不重复(好吧,它们不应该重复,因为 writer 与不同 = 在名称上)也没有任何不同(除了 作家 需要一个参数),同时在活动对象外部访问它们。
1.+(2)
1+2
attr_accessor
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) 改为不调用。
t.number = 13
t.number=(13)
t.number = 13 只是 t.number=(13) ,它们在Ruby中实际上是相同的语句。
attr_accessor :b 创建以下两种方法的等效项:
attr_accessor :b
def b @b end def b=(new_val) @b = new_val end
因此,在您的代码示例中,您可以替换这两个方法 #number 和 #number= 具有 attr_accessor :number
#number
#number=
attr_accessor :number