代码之家  ›  专栏  ›  技术社区  ›  Mark A. Nicolosi

从类内调用属性访问器方法

  •  4
  • Mark A. Nicolosi  · 技术社区  · 16 年前

    我正试图得到我的一个类属性编写器的调用,但出于某种原因它从未被调用。下面是一些代码,可以更清楚地说明这一点:

    class Test
      attr_reader :test
    
      def test=(val)
        puts 'Called'
        @test = val
      end
    
      def set_it(val)
        test = val
      end
    end
    
    obj = Test.new
    obj.set_it 5
    puts obj.test
    => nil
    

    结尾的Puts语句输出“nil”。向test=添加调试语句表明从未调用它。我做错什么了?

    更新

    我重新写了这个问题的一部分,因为我写这个问题时并没有真正理解它。所以这个问题现在更普遍了。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Logan Capaldo    16 年前

    从本质上说,你没有做错什么。Ruby只是认为您打算将局部变量测试设置为val,而不是调用 test= 方法。 self.test = val 会做你所期望的。

        2
  •  0
  •   Community CDub    8 年前

    关于这个(显然很常见的)问题,这里还有一些其他资源:

    另一个堆栈溢出问题: Why do ruby setters need “self.” qualification within the class?

    由此 guys's blog :

    作为一个红宝石新手,你可能曾经做过 race = "hooman" 但注意到它不起作用,就对自己说:“我不会让这再次发生在我身上。”从现在开始,我会提前准备 self. 每当我调用一个方法!艾斯

    推荐文章