attr_accessor для класса вопроса - PullRequest
0 голосов
/ 12 сентября 2010

Я думал, что можно определить методы attr_accessor в собственном классе следующим образом:

class IOS
  @@modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end

end

puts IOS::modules_paths

Но это ничего не возвращает.

Есть ли способ сделать это?

Ответы [ 2 ]

6 голосов
/ 12 сентября 2010

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 .

1 голос
/ 12 сентября 2010

Вы никогда не вызываете метод установки IOS::modules_paths= и не назначаете соответствующую переменную @modules_paths экземпляра в любом месте.Следовательно, @modules_paths унифицируется и, таким образом, IOS.modules_paths возвращает унитализированную переменную.В Ruby неинициализированные переменные оцениваются как nil, а puts nil ничего не печатает.

...