- 为什么
Foo.val
在调用Foo.set
之前返回nil
而不是"foo"
? - 是否有任何机制可以在类评估时初始化
@val
? @val = "foo"
存储在哪个范围内?class Foo class << self @val = "foo" attr_reader :val def set(val) @val = val end end end p Foo.val # nil Foo.set("bar") p Foo.val # "bar"
最佳答案
您可以像这样在 Foo 中初始化 @val
:
class Foo
@val = "foo"
class << self
attr_reader :val
def set(val)
@val = val
end
end
end
p Foo.val #=> "foo"
Foo.set("bar")
p Foo.val #=> "bar"
您的代码不是在 Foo 上而是在 Foo 的元类上初始化 @val
关于Ruby 元编程 : Initialize singleton_class variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968333/