Ruby语法中的含义是什么意思?

时间:2014-09-14 01:03:18

标签: ruby

什么是::

@song ||= ::TwelveDaysSong.new

3 个答案:

答案 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已设置(某些真值,即nilfalse),则表达式仅计算该值。

但是,如果@song尚未设置为此值,则会创建类TwelveDaysSong的新实例并将其分配给@song。然后,和以前一样,表达式的计算结果为@song,但该值现在是对新创建的TwelveDaysSong对象的引用。

在类名上使用::意味着它是一个绝对的顶级类;即使在当前模块中定义了TwelveDaysSong类,它也将使用顶级类。

答案 2 :(得分:0)

返回@song

如果@song为假(例如它不存在), 创建::TwelveDaysSong对象的新实例@song