这个双冒号是什么?例如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相关问答推荐

运行跳过的RSpec测试,如果通过则失败

使用 Ruby,我如何访问和比较这些嵌套的数组值?

碰撞检测测试中对象的 Nil 类

Rack并发 - rack.multithread、async.callback 或两者兼而有之?

Ruby 中的yield关键字有什么作用?

ruby `encode': "\xC3" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)

对具有相同键的 2 个哈希属性求和

复制文件,在 Ruby 中根据需要创建目录

确保如何在 ruby​​ 中工作

Ruby代码美化,多行拆分长指令

Ruby 哈希默认值行为

如何自定义 Jekyll 的 url?

require File.expand_path(..., __FILE__) 是最佳实践吗?

Ruby 被空格分割

Ruby 中 Array#reject 的反义词是什么?

如何转换 Ruby 哈希,使其所有键都是符号?

纯 Ruby 并发哈希

将 lambda 作为块传递

Ruby 中的 each 和 collect 方法有什么不同

判断文件名是文件夹还是文件