代码之家  ›  专栏  ›  技术社区  ›  Davit

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

  •  3
  • Davit  · 技术社区  · 13 年前

    我确实理解Ruby支持短手风格的调用方法,即: 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) 改为不调用。

    1 回复  |  直到 13 年前
        1
  •  1
  •   Stuart M    13 年前

    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

    推荐文章