Ruby作用域:与MyClass的区别.MyClass.new和::



我知道双冒号(::)基本上是一个名称空间解析操作符。但在这种特殊情况下,我不确定我在哪个范围内工作。这是否意味着我想要MyClass类从ruby核心?有点像~表示bash中的主目录..

想象下面的代码:

class A
  def a
    puts 'TOPMOST'
  end
end
module B
  class A
    def a
      puts 'NESTED'
    end
  end
  def self.topmost
    ::A.new.a
  end
  def self.nested
    A.new.a
  end
end

B.topmost将打印"TOPMOST", B.nested将打印"NESTED"

所以,::A的意思不是" from ruby core ",而是" from no module. "

最新更新