类问题的attr_accessor

时间:2010-09-12 01:48:00

标签: ruby class-variables

我认为在这样的特征类中定义attr_accessor方法是可能的:

class IOS
  @@modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end

end

puts IOS::modules_paths

但这没有任何回报。

有办法吗?

2 个答案:

答案 0 :(得分:6)

您添加到类中的attr_accessor使用类级实例变量,而不是类变量。在某些情况下,这实际上可能更有帮助,因为当继承进入图片时类变量会变得荒谬。

class IOS
  @modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end
end

puts IOS::modules_paths # outputs "hello"

如果您真的需要它来使用类变量,您可以手动定义方法,引入ActiveSupport并使用cattr_accessor,或只使用copy the relevant ActiveSupport methods

答案 1 :(得分:1)

您永远不会调用IOS::modules_paths= setter方法,也不会在任何地方分配相应的@modules_paths实例变量。因此,@modules_paths被酉化,因此IOS.modules_paths返回一个酉变量。在Ruby中,未初始化的变量计算为nilputs nil不打印任何内容。