я могу получить доступ к переменным класса в экземпляре через консоль? - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть несколько классов, которые наследуются от одного класса:

class Bravo << Alpha
class Charlie << Alpha

У Alpha есть некоторые переменные уровня класса:

class Alpha 
  @@terms 

  def initialize 
    ...
    @@terms ||= load_terms 
  end 
end 

ОК, пока все хорошо.Но я хотел бы получить доступ к переменным уровня класса из консоли для устранения неполадок.Это возможно?Я пытался:

# inst is an instance of Bravo for example
inst.class.superclass:terms
inst.@@terms
inst.class.superclass[:terms]

Не ожидал, что это действительно сработает, просто хватался за соломинку, так как не смог найти ответа на этот вопрос.Я подтвердил, что переменные класса доступны через:

>> inst.class.superclass.class_variables
=> [:terms]

ОК, я вижу, что они есть, но есть ли какой-нибудь способ прямого доступа к ним через консоль rails?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Попробуйте pry gem, очень полезно для таких целей (может работать как консоль Rails):

$ pry
[1] pry(main)> class A
[1] pry(main)*   @@a = 1
[1] pry(main)* end  
=> 1
[2] pry(main)> a = A.new
=> #<A:0x101ba8ea0>
[3] pry(main)> cd a.class
[4] pry(A):1> @@a
=> 1
[5] pry(A):1> cd /
[6] pry(main)> cd A
[7] pry(A):1> @@a
=> 1
2 голосов
/ 15 февраля 2012

Вы почти сделали это:)

class Alpha
  @@terms = 'foo'
end

class Bravo < Alpha
end

b = Bravo.new
puts b.class.class_variable_get '@@terms'
# => foo

Это может выглядеть сложно, и, вероятно, это так по причине: отговаривать людей возиться с внутренностями класса ( Я не знаюесли это правда, я просто выдумал ).

Если вам это нужно регулярно, добавьте для него средство доступа!

class Alpha
  @@terms = 'foo'

  def self.terms
    @@terms
  end
end


puts Alpha.terms
# => foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...