对Ruby中的类继承感到困惑,多次引用self

时间:2015-11-09 20:15:54

标签: ruby oop

我正在尝试解构一颗红宝石宝石,以便更好地了解红宝石中的Oop。在大多数情况下,我可以真正看到继承的好处,并使用模块作为名称空间等。但在某些情况下。我不确定我是否能获得额外的好处,我想也许在规模上有我在本地机器上无法理解的好处。例如......

此代码。

module TestInheritance
    @testVariable = ""

    def self.configure
        yield @testVariable
    end
end

这段代码

module TestInheritance2
    @testVariable = ""

    class << self
        attr_accessor :testVariable
    end

    def self.configure
        yield self.testVariable
    end
end

完全一样的事情。在TestInheritance2中,一个unamed类继承self,在这种情况下是整个模块,然后使测试变量在类外部可访问。如果没有这一步,配置块可以正常工作,为什么要将其添加到代码中?

1 个答案:

答案 0 :(得分:0)

这个问题的背景非常有限;没有更多的用例,没有理由比第一个更喜欢第二个代码块。但是,有一个主要区别,可以在更完整的用例中发挥作用:

在第一个代码块中,testVariable的值仅适用于TestInheritance对象上的方法。

在第二个代码块中,testVariable的值通过方法TestInheritance2.testVariable向其他呼叫者公开。

这是另一个更详细,但也许更清晰的方法来创建getter和setter方法(其行为与第二个代码块相同):

module TestInheritance2
  @testVariable = ""

  def self.testVariable
    return @testVariable
  end

  def self.testVariable=(value)
    @testVariable = value
  end
end