【发布时间】:2011-01-09 01:40:05
【问题描述】:
有没有办法在 ruby 中使实例变量“私有”(C++ 或 Java 定义)?换句话说,我希望以下代码导致错误。
class Base
def initialize()
@x = 10
end
end
class Derived < Base
def x
@x = 20
end
end
d = Derived.new
【问题讨论】:
-
这似乎是一个有点不寻常的请求,这种模式的用例是什么?也许你知道一些我不知道的东西,这在未来会有用。
-
来自 C++ 世界,对我来说,在基类中拥有无法在派生类中访问的私有变量看起来很自然,这让我很有信心在派生类中不会对其进行修改班级。在上面的例子中,如果可以将其设为私有实例变量,我可以确定 @x 将被修改的唯一位置是在类“Base”中。
-
我认为您不应该尝试在 Ruby 中编写 C++ 代码。由于 Ruby 是一种非常动态且功能强大的语言,因此总会有一种方法可以获取私有数据。
-
你能给我一个更具体的用例吗?它不必是一个复杂的。我觉得如果我理解了一个你不希望对象能够访问它自己的槽的问题,它可能会有助于讨论。
标签: ruby instance-variables private-members