0

我认为可以像这样在特征类中定义 attr_accessor 方法:

class IOS
  @@modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end

end

puts IOS::modules_paths

但这没有任何回报。

有没有办法做到这一点?

4

2 回答 2

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,或者只是复制相关的 ActiveSupport 方法

于 2010-09-12T02:16:24.943 回答
1

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

于 2010-09-12T02:18:39.963 回答