【发布时间】:2012-03-17 22:50:58
【问题描述】:
我正在寻找方法来创建相应的 attr_reader 方法,同时在初始化方法中设置相应实例变量的值?例如以下代码:
class SomeClass
attr_reader :hello
def initialize( arg)
@hello = arg
end
end
我正在寻找如下写法:
class SomeClass
def initialize( arg)
some_method_as_described_in_question( @hello, arg)
end
end
Ruby 内置类和模块中是否存在我所描述的方法?
【问题讨论】:
-
不,没有这种方法。
-
这似乎很方便,是访问控制的问题吗?为什么不包括在内?
-
在实例方法 (
initialize) 中包含一个您调用的方法可能会很奇怪,该方法会更改类上的内容,即其他实例上也是如此。还是您只希望它在当前实例上设置阅读器?你可以在 Ruby 1.9 中使用define_singleton_method来做到这一点:gist.github.com/be3485dde76c0da72a00 也许你可以澄清这个问题? -
@KurtRudolph,因为目前还不清楚具体会做什么。如果它应该在类中添加一个成熟的属性读取器,那么将它放在初始化方法中是没有意义的。然后每次创建一个新对象时,它都会在类级别上执行相同的属性分配。如果您想在 eigenclass 上执行此操作,以便为每个实例动态设置属性读取器,请参阅我的答案。如果只是为了“方便”,那么它甚至没有意义,因为它会做一些无用或不同的事情。