我有几个继承自单个类的类:
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控制台直接访问它们?
答案 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