这个双冒号是什么?例如Foo::Bar.

我找到了一个definition:

::是一元运算符,允许从类或模块之外的任何地方访问类或模块内定义的常量、实例方法和类方法.

如果你可以用::来expose 任何东西,那么scope(私有的,受保护的)有什么好处?

推荐答案

::基本上是一个名称空间解析运算符.它允许您访问模块中的项,或类中的类级项.例如,假设您有以下设置:

module SomeModule
    module InnerModule
        class MyClass
            CONSTANT = 4
        end
    end
end

您可以从模块外部访问CONSTANT,即SomeModule::InnerModule::MyClass::CONSTANT.

它不会影响类上定义的实例方法,因为您可以使用不同的语法(点.)访问这些方法.

相关说明:如果要返回顶级名称空间,请执行以下操作:::SomeModule–Benjamin Oakes

Ruby相关问答推荐

Gemfile.lock 是否应该包含在 .gitignore 中?

为什么我们在 Ruby 中有 0.0 和 -0.0?

如何在 Ruby 中映射和删除 nil 值

为什么整数除法在许多脚本语言中舍入?

使用 RSpec 存根 Time.now

无法在 Windows 上安装 Aptana Studio 3.6

gem eventmachine 致命错误:找不到“openssl/ssl.h”文件

进程的 pid、ppid、uid、euid、gid 和 egid 有什么区别?

找不到Bundle 命令 mac

rhc 设置给出错误“没有这样的文件 dl/import”

RSpec allow/expec vs expect/and_return

当我将参数传递给脚本时,使用 gets() 会出现“没有这样的文件或目录”错误

Ruby open-uri 重定向被禁止

Vagrant - 如何拥有特定于主机平台的配置步骤

不支持您提供的授权机制.请使用 AWS4-HMAC-SHA256

删除 Ruby 数组中的 nil 和空白字符串

rbenv、rvm 和 chruby 有什么区别?

Python 是否有像 Ruby 中的 ||= 这样的“or equals”函数?

通过多个分隔符拆分字符串

如何期望 RSpec should_receive 的一些(但不是全部)参数?