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

时间:2015-08-24 13:35:29

标签: ruby-on-rails ruby ruby-on-rails-3 class inheritance

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

应用/服务/ 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?

应用/服务/ my_service / my_action / my_model.rb

module <my_service>
  module <my_action>
    class <my_model>

应用/服务/ my_service / my_model.rb

module <my_service>
    class <my_model>

应用/模型/ my_model.rb

class <my_model> < ActiveRecord::Base
  . . . 
  MY_CONST = "my constant"

my_model_2.rb有什么区别?

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

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

1 个答案:

答案 0 :(得分:6)

前导::强制Ruby解释器开始从顶级命名空间解析类名。这意味着,如果您有一个类Foo::Bar::Baz并且同时定义了Boo类/模块

  • 富::啵

Boo内引用Foo::Bar::Baz实际上会以Foo::Boo模块/类结尾,而如果您使用::Boo,它将与Boo匹配,因为名称的解析将从主命名空间开始。