什么是::
?
@song ||= ::TwelveDaysSong.new
答案 0 :(得分:8)
Ruby ::(双半冒号)
顶级常量由双冒号
引用class TwelveDaysSong
end
a = TwelveDaysSong.new
#I could wrote it like this too
a = ::TwelveDaysSong.new
module Twelve
class TwelveDaysSongs
end
end
b = Twelve::TwelveDaysSong.new
#b is not equal to
a = ::TwelveDaysSong.new
#neither
a = TwelveDaysSong.new
如果你有一个常量
,那么类也是常量HELLOWOLRD = 'hw'
您可以像::HELLOWORLD
答案 1 :(得分:1)
这是一种懒惰地初始化@song
实例变量的方法。
如果@song
已设置(某些真值,即nil
或false
),则表达式仅计算该值。
但是,如果@song
尚未设置为此值,则会创建类TwelveDaysSong
的新实例并将其分配给@song
。然后,和以前一样,表达式的计算结果为@song
,但该值现在是对新创建的TwelveDaysSong
对象的引用。
在类名上使用::
意味着它是一个绝对的顶级类;即使在当前模块中定义了TwelveDaysSong
类,它也将使用顶级类。
答案 2 :(得分:0)
返回@song
如果@song
为假(例如它不存在),
创建::TwelveDaysSong
对象的新实例@song