【问题标题】:What does :: mean in Ruby syntax? [duplicate]:: 在 Ruby 语法中是什么意思? [复制]
【发布时间】:2014-11-07 20:47:26
【问题描述】:

:: 是什么?

@song ||= ::TwelveDaysSong.new

【问题讨论】:

  • 我知道命名空间,但我没有看到 :: 在没有前缀的情况下使用。我想这让我感到困惑。我现在明白它指的是根级对象命名空间

标签: ruby


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是一种延迟初始化@song 实例变量的方法。

    如果@song 已设置(设置为某个真实值,即不是nilfalse),则表达式仅计算为该值。

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

    在类名上使用::表示它是一个绝对的、顶级的类;即使在当前模块中定义了TwelveDaysSong 类,它也会使用顶级类。

    【讨论】:

      【解决方案3】:

      返回@song

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

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 2023-03-15
        • 2014-04-09
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 2017-09-28
        相关资源
        最近更新 更多