ruby - 在类 << self 中使用 attr_accessor 的类变量

标签 ruby class-variables attr-accessor

有人可以解释为什么 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/

相关文章:

ruby-on-rails - 具有数据类型的属性访问器

ruby - 使用 cloc(计算代码行数)结果

ruby - 使用 Ruby 解析 XML

c++ - 如何将数组传递给构造函数并保存在类变量中

python - 将模块方法分配给类变量或实例变量

ruby-on-rails - attr_accessible,attr_accessor,我想知道他们做什么

Ruby:从内部方法访问 attr_accessor 的方法

ruby - 如何将curl 的输出读入ruby 变量?

ruby - 在 Watir 中使用 file_field 上传文件时出现问题

objective-c - 如何为 objective-c 中的其他类变量赋值