我想你在找类变量。
Class
变量在类、子类和实例之间共享。
类变量必须以
@@
(两个at标志)。名称的其余部分遵循与实例变量相同的规则。
class A
@@class_variable = 0
def value
@@class_variable
end
def update
@@class_variable = @@class_variable + 1
end
end
class B < A
def update
@@class_variable = @@class_variable + 2
end
end
a = A.new
b = B.new
puts "A value: #{a.value}"
puts "B value: #{b.value}"
这张照片:
A value: 0
B value: 0
继续使用相同的示例,我们可以使用任一类中的对象进行更新,并且值是共享的:
puts "update A"
a.update
puts "A value: #{a.value}"
puts "B value: #{b.value}"
puts "update B"
b.update
puts "A value: #{a.value}"
puts "B value: #{b.value}"
puts "update A"
a.update
puts "A value: #{a.value}"
puts "B value: #{b.value}"
update A
A value: 1
B value: 1
update B
A value: 3
B value: 3
update A
A value: 4
B value: 4
访问未初始化的类变量将引发
NameError
例外。
注意,类有实例变量,因为类是对象,所以不要混淆类和实例变量。