冒号`::`?
什么是这个双冒号::
? 例如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的方法的可见性。
上一篇: colon `::`?