我正在尝试学习一些基本的ruby元编程,并且已经给了这样一个类:
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
我需要像这样输出这些变量而不修改类:
1
2
3
11
22
33
到目前为止,这是我的代码:
p A.instance_variable_get(:@a) #=> 1
p A.class_variable_get(:@@a) #=> 2
A.new.instance_eval do
puts @a #=> 11
end
现在我如何访问剩余的变量?
答案 0 :(得分:2)
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
p A.instance_variable_get(:@a) # >> 1
p A.class_variable_get(:@@a) # >> 2
p A.new.instance_variable_get(:@a) >> 11
p A.class_variable_get(:@@a) # >> 22
请注意,获取var 22的行与获取var 2的行相同,因为它是同一个变量,并且在调用A.new
时它的值被覆盖。
对于普通的a
变量,你无法得到它们,因为它们是本地变量并且不再存在。
答案 1 :(得分:1)
好的,那么感兴趣的人的最终解决方案:
catcher = class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
对那个作弊但是这有效
puts A.class_eval { @a } #=> 1
puts A.class_variable_get :@@a #=> 2
puts A.new.instance_eval { @a } #=> 11
puts catcher #=> 3
puts A.new.send :initialize #=> 33