这是什么双冒号::
? 例如Foo::Bar
。
我找到一个定义 :
::
是一元运算符,它允许在类或模块之外定义的任何位置访问常量,实例方法和类方法。
如果仅使用::
公开任何内容,范围(私有,受保护)有什么用?
#1楼
Ruby on rails使用::进行名称空间解析。
class User < ActiveRecord::Base
VIDES_COUNT = 10
Languages = { "English" => "en", "Spanish" => "es", "Mandarin Chinese" => "cn"}
end
要使用它:
User::VIDEOS_COUNT
User::Languages
User::Languages.values_at("Spanish") => "en"
另外,其他用法是:使用嵌套路由时
OmniauthCallbacksController
在用户下定义。
路线就像:
devise_for :users, controllers: {omniauth_callbacks: "users/omniauth_callbacks"}
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
#2楼
module Amimal
module Herbivorous
EATER="plants"
end
end
Amimal::Herbivorous::EATER => "plants"
::用于创建范围。 为了从2个模块访问Constant EATER,我们需要调整模块的范围以达到常量
#3楼
这是关于防止定义与项目中链接的其他代码冲突的全部内容。 这意味着您可以将事情分开。
例如,您的代码中可以有一个称为“运行”的方法,您仍然可以调用该方法,而不是已链接到其他库中定义的“运行”方法。
#4楼
::
是一个名称空间解析运算符。 它允许您访问模块中的项目或类中的类级别的项目。 例如,假设您有以下设置:
module SomeModule
module InnerModule
class MyClass
CONSTANT = 4
end
end
end
您可以访问CONSTANT
从模块外SomeModule::InnerModule::MyClass::CONSTANT
。
它不会影响在类上定义的实例方法,因为您可以使用不同的语法(点.
)来访问它们。
相关注意事项:如果要返回顶级命名空间,请执行以下操作::: SomeModule – Benjamin Oakes
#5楼
::
您可以访问在另一个类或模块内定义的常量,模块或类。 它用于提供名称空间,以使方法和类名不会与不同作者的其他类冲突。
当您在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
::
运算符不允许您绕过标记为私有或受保护的方法的可见性。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3163256