Ruby中的类变量(Class Variables)是一种在类的定义中声明的变量,它们属于类本身而不是类的实例。类变量的应用场景包括:
class MyClass
@@shared_data = 0
def increment
@@shared_data += 1
end
end
instance1 = MyClass.new
instance2 = MyClass.new
instance1.increment
instance2.increment
puts instance1.instance_variable_get(:@shared_data) # 输出 2
puts instance2.instance_variable_get(:@shared_data) # 输出 2
class MyClass
@@instance_count = 0
def self.increment_instance_count
@@instance_count += 1
end
def self.instance_count
@@instance_count
end
end
MyClass.increment_instance_count
puts MyClass.instance_count # 输出 1
class MyClass
@@lazy_loaded_resource = nil
def self.lazy_load_resource
return @@lazy_loaded_resource if @@lazy_loaded_resource
# 模拟加载资源的过程
@@lazy_loaded_resource = "Resource loaded"
end
end
puts MyClass.lazy_load_resource # 输出 "Resource loaded"
puts MyClass.lazy_load_resource # 输出 "Resource loaded"(不会再次加载资源)
需要注意的是,类变量在多线程环境下可能会导致数据竞争和不一致的问题。在这种情况下,可以考虑使用实例变量(Instance Variables)或类方法(Class Methods)来实现相同的功能。