类的开头的'::'如何影响范围(ruby/rails)?

Cha*_*zen 2 ruby inheritance ruby-on-rails class ruby-on-rails-3

我正在一个大型rails项目中工作,我有一些文件:

app/services/my_service/my_action/my_model_2.rb:

module <my_service>
  module <my_action>
    class <my_model_2>
      . . .
      if some_var = <my_model>::MY_CONST
      if some_Var = ::<my_model>::MY_CONST # <-- what is the difference here?
Run Code Online (Sandbox Code Playgroud)

app/services/my_service/my_action/my_model.rb:

module <my_service>
  module <my_action>
    class <my_model>
Run Code Online (Sandbox Code Playgroud)

app/services/my_service/my_model.rb:

module <my_service>
    class <my_model>
Run Code Online (Sandbox Code Playgroud)

app/models/my_model.rb:

class <my_model> < ActiveRecord::Base
  . . . 
  MY_CONST = "my constant"
Run Code Online (Sandbox Code Playgroud)

my_model_2.rb有什么区别?

如何从my_model_2.rb正确访问每个模型的范围?

请注意,app/models类名与app/services类名相同.

Sim*_*tti 6

领导者::迫使Ruby解释器开始从顶级命名空间解析类名.这意味着,如果您有一个类,Foo::Bar::BazBoo在两者中定义了类/模块

  • 富::嘘

引用Boo内部Foo::Bar::Baz实际上将结束Foo::Boo模块/类,而如果使用::Boo它将匹配,Boo因为名称的分辨率将从主命名空间开始.