冒号`::`?

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

我找到了一个定义:

The ::是一个一元运算符,它允许:在类或模块内定义的常量,实例方法和类方法可以从类或模块外的任何地方访问。

如果你可以使用::来暴露任何东西,范围(私有,受保护)有什么好处?


::基本上是一个名称空间解析运算符。 它允许您访问模块中的项目或课堂中的课程级别项目。 例如,假设你有这样的设置:

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

你可以从模块外部访问CONSTANT作为SomeModule::InnerModule::MyClass::CONSTANT

它不影响一类定义的实例方法,因为你访问那些具有不同的语法(点. )。

相关说明:如果您想返回顶层命名空间,请执行以下操作::: SomeModule - Benjamin Oakes


这个简单的例子说明了它:

MR_COUNT = 0        # constant defined on main Object class
module Foo
  MR_COUNT = 0
  ::MR_COUNT = 1    # set global count to 1
  MR_COUNT = 2      # set local count to 2
end

puts MR_COUNT       # this is the global constant
puts Foo::MR_COUNT  # this is the local "Foo" constant

摘自http://www.tutorialspoint.com/ruby/ruby_operators.htm


::允许您访问另一个类或模块中定义的常量,模块或类。 它用于提供名称空间,以便方法和类名不会与其他作者的其他类发生冲突。

当你在Rails中看到ActiveRecord::Base ,这意味着Rails有类似的东西

module ActiveRecord
  class Base
  end
end

即在ActiveRecord模块内调用Base的类,然后将其引用为ActiveRecord::Base (您可以在activerecord -nnn / lib / active_record / base.rb的Rails源代码中找到它)

::的一个常见用途是访问模块中定义的常量,例如

module Math
  PI = 3.141 # ...
end

puts Math::PI

::运算符不允许您绕过标记为private或protected的方法的可见性。

链接地址: http://www.djcxy.com/p/10147.html

上一篇: colon `::`?

下一篇: Difference between "!==" and "==!"