我可以通过控制台访问实例中的类变量吗?

时间:2012-02-14 22:12:17

标签: ruby ruby-on-rails-3

我有几个继承自单个类的类:

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 个答案:

答案 0 :(得分:2)

你几乎成功了:)

class Alpha
  @@terms = 'foo'
end

class Bravo < Alpha
end

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

它可能看起来很复杂,也可能是出于某种原因:劝阻人们不要乱搞课堂&#39;内部(我不知道它是否真实,我只是做了)。

如果您需要定期,请为其添加一个存取器!

class Alpha
  @@terms = 'foo'

  def self.terms
    @@terms
  end
end


puts Alpha.terms
# => foo

答案 1 :(得分:2)

尝试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