Доступ к переменным класса? - PullRequest
3 голосов
/ 20 октября 2010
class Foo
  @@default = "default"

  p instance_variables
  p class_variables

  class << self
    p instance_variables
    p class_variables

    # How do I access the @@default variable here?
  end
end

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Так же, как вы делаете это в любом другом месте: @@default.

Я не уверен, что p .. должен делать (Ruby не мой родной язык), но это работает

class Foo
  @@default = "default"

  class << self
    puts "#{@@default}"
  end
end
1 голос
/ 20 октября 2010

Этот вопрос довольно интересен, потому что он по существу спрашивает: "Есть ли способ, чтобы метакласс ссылался на свой" настоящий "класс?

И, насколько я могу судить, ответ «нет», потому что все «восходящие» указатели предков, которые Ruby хранит, также указывают на метаклассы, и поэтому запуск class_variables() в одном из них скажет вам о его переменные экземпляра класса . Итак, вы должны ссылаться на объекты по имени или просто устанавливать дескриптор перед входом в контекст метакласса ...

class Foo
  @@default = "default"
  @@me = self

  p instance_variables
  p class_variables

  class << self
    p instance_variables
    p @@me.class_variables
  end
end
...