这个双冒号::是什么?例如Foo:酒吧。
我找到了一个定义:
::是一个一元操作符,允许在类或模块内定义的:常量、实例方法和类方法从类或模块外的任何地方访问。
如果你只能使用::来暴露任何东西,那么作用域(私有的,受保护的)有什么用呢?
这个双冒号::是什么?例如Foo:酒吧。
我找到了一个定义:
::是一个一元操作符,允许在类或模块内定义的:常量、实例方法和类方法从类或模块外的任何地方访问。
如果你只能使用::来暴露任何东西,那么作用域(私有的,受保护的)有什么用呢?
当前回答
加上前面的答案,使用::访问实例方法是有效的Ruby。以下均有效:
MyClass::new::instance_method
MyClass::new.instance_method
MyClass.new::instance_method
MyClass.new.instance_method
根据最佳实践,我认为只推荐最后一种。
其他回答
module Amimal
module Herbivorous
EATER="plants"
end
end
Amimal::Herbivorous::EATER => "plants"
::用于创建作用域。为了从2个模块中访问Constant EATER,我们需要确定模块的范围以达到常数
这一切都是为了防止定义与链接到项目中的其他代码冲突。这意味着你可以把事情分开。
例如,你可以在你的代码中有一个名为“run”的方法,你仍然可以调用你的方法,而不是在你链接的其他库中定义的“run”方法。
Ruby on rails使用::进行名称空间解析。
class User < ActiveRecord::Base
VIDEOS_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
::允许您访问在另一个类或模块中定义的常量、模块或类。它用于提供名称空间,以便不同作者的方法名和类名不会与其他类冲突。
当你在Rails中看到ActiveRecord::Base时,这意味着Rails有类似于
module ActiveRecord
class Base
end
end
例如,在ActiveRecord模块中一个名为Base的类,然后被引用为ActiveRecord::Base(你可以在Rails源代码ActiveRecord -n.n.n/lib/active_record/ Base .rb中找到这个)
::的常用用法是访问模块中定义的常量。
module Math
PI = 3.141 # ...
end
puts Math::PI
操作符不允许绕过标记为private或protected的方法的可见性。
稍微恢复一下这个线程。 我们可以为这个操作符创建一个ruby名称吗:: 令人惊讶的是,我们还没有,因为我们有飞溅,蔓延,散列火箭等。
当然我们可以想出比“双冒号”或“一元运算符”更有趣的东西
思考
四点 四眼 利乐点 啃(半字节- 4位)