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

标签 ruby scope

<分区>

我知道双冒号 (::) 基本上是一个 namespace 解析运算符。但在这种特殊情况下,我不确定我在哪个范围内工作。这是否意味着我想要来自 ruby​​ 核心的 MyClass 类?有点像 ~ 表示 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 的意思不是“来自 ruby​​ 核心”,而是“来自无模块”。

关于Ruby 作用域:MyClass.new 和::MyClass.new 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31520262/

相关文章:

php - 使用 Assetic PHP 安装 RVM 后 Sass 损坏

C++ 定义变量的作用域?

ruby - 回声abc | ruby -p -e "sub(' a' ,'A' ).sub ('b' , 'B' )": why not "ABc”?

ruby-on-rails - 使用 RSpec 测试用户身份验证

sql - 使用 select 从不同的表中获取列值

c++ - 退出函数后 vector 大小变为 0

variables - 在创建 lambda 时捕获变量的值

javascript - 在express中传递额外参数 - Node.JS

javascript - 使用从函数返回的字符串选择预定义变量

ruby-on-rails - 不正确的 deploy.rb - "NoMethodError: undefined method ` tail' for nil :NilClass"