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)來實現相同的功能。