有人可以解释为什么 self.foo= 在类 << self 之外工作,而 foo= 在类 << self 内不起作用。
class A
class << self
attr_accessor :foo
foo = 'foo'
end
end
p A.foo # => "nil"
class A
class << self
attr_accessor :foo
end
self.foo = 'foo'
end
p A.foo # => "foo"
这与 When to use 'self' in Ruby 不是同一个问题
需要说明的是,我不是在问什么时候使用 self。我在问为什么我不能在“class << self” block 中设置类变量,但我可以在它之外。
最佳答案
你的第二个例子不是一个类变量,它是这个类的一个类实例变量证明是如果你像这样继承你会得到 nil
class A
class << self
attr_accessor :foo
end
self.foo = 'foo'
end
class B < A
end
B.foo # => nil
所以如果你想在class << self
中添加一个类变量你可以使用 @@
class A
class << self
@@foo = :foo
def foo
@@foo
end
end
end
关于ruby - 在类 << self 中使用 attr_accessor 的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444209/