[英]How do I initialize a class variable in Ruby?
例如:
class MyClass
@@var1 = '123456'
def self.var1
@@var1
end
class << self
attr_accessor :var2
def self.initialize
self.var2 = 7890
end
end
end
p MyClass.var1 # "123456"
p MyClass.var2 # nil
有什么辦法初始化var2嗎?
如果var2不是布爾值,則可以執行此操作。
class MyClass
class << self
attr_writer :var2
end
def self.var2
@@var2 ||= 'my init value'
end
end
首先,這是類變量和單例類的混淆。 當您在做class << self
時,並不意味着您現在可以將@@var1
作為self.var1
。 我通過這個例子來說明
class MyClass
@@var1 = '123456'
class << self
attr_accessor :var1
def get_var1
@@var1
end
def set_var1
self.var1 = '654321'
end
end
end
MyClass.get_var1 #=> '123456'
MyClass.set_var1 #=> '654321'
MyClass.get_var1 #=> '123456'
如您所見,@@ var1在整個類范圍內可用,但與單例變量不同。
類變量在類的所有對象之間共享,並且類方法也可以訪問它。 因此,您可以在任何可以接受的地方對其進行初始化。 最簡單易懂的是在類范圍內。
class MyClass
@@var1 = '123456'
...
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.