我正在尝试解构一颗红宝石宝石,以便更好地了解红宝石中的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,在这种情况下是整个模块,然后使测试变量在类外部可访问。如果没有这一步,配置块可以正常工作,为什么要将其添加到代码中?
答案 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