使用class_eval和instance_eval访问Ruby类变量
我有以下内容:
class Test
@@a = 10
def show_a()
puts "a: #{@@a}"
end
class << self
@@b = '40'
def show_b
puts "b: #{@@b}"
end
end
end
为什么以下工作:
Test.instance_eval{show_b}
b: 40
=> nil
但我不能直接访问@@b
?
Test.instance_eval{ @@b }
NameError: uninitialized class variable @@b in Object
同样,以下工作
t = Test.new
t.instance_eval{show_a}
a: 10
=> nil
但是以下失败了
t.instance_eval{ @@a }
NameError: uninitialized class variable @@a in Object
我不明白为什么我不能直接从instance_eval
块访问类变量。
没有找到相关结果
已邀请:
4 个回复
苛肠倒俱
蜂佬渺
或
,行为会有所不同。 以下示例详细说明了大多数情况下的行为。 我还包括了常量的行为,这是好的衡量标准,因为它们的行为类似于类变量,但不完全相同。 类变量 Ruby7ѭ在Ruby 1.8中:
Ruby7ѭ在Ruby 1.9中:
因此,当使用
时,在1.9(但不是1.8)中查找类变量
在Ruby 1.8和1.9中
当使用
时,似乎没有在1.8或1.9中查找类变量 有趣的是常量的情况: 常量 Ruby7ѭ在Ruby 1.8中
在Ruby 1.9中
因此,与类变量一样,常量在1.9中查找,但在
中不在1.8中 Ruby6ѭ在Ruby 1.8中
Ruby6ѭ在Ruby 1.9中
似乎常量查找与Ruby 1.9的类变量查找不太相似。
实例确实可以访问常量,而
类则不能。
犀寺扦
骨酚柯