Class 变量在 class << self 中使用 attr_accessor
Class variable using attr_accessor inside class << self
有人可以解释为什么 self.foo= 在 class << self 之外工作,而 foo= 在 class << 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' 块内设置 class 变量,但我可以在它之外设置。
你的第二个例子不是 class 变量,它是这个 class 的一个 class 实例变量,证据是如果你像这样继承你会得到 nil
class A
class << self
attr_accessor :foo
end
self.foo = 'foo'
end
class B < A
end
B.foo # => nil
因此,如果您想在 class << self
中添加一个 class 变量,您可以使用 @@
class A
class << self
@@foo = :foo
def foo
@@foo
end
end
end
有人可以解释为什么 self.foo= 在 class << self 之外工作,而 foo= 在 class << 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' 块内设置 class 变量,但我可以在它之外设置。
你的第二个例子不是 class 变量,它是这个 class 的一个 class 实例变量,证据是如果你像这样继承你会得到 nil
class A
class << self
attr_accessor :foo
end
self.foo = 'foo'
end
class B < A
end
B.foo # => nil
因此,如果您想在 class << self
中添加一个 class 变量,您可以使用 @@
class A
class << self
@@foo = :foo
def foo
@@foo
end
end
end