2015-08-24 4 views
2

Я работаю в большом проекте рельсы, где у меня есть некоторые файлы:Как «::» в начале класса влияет на область действия (рубин/рельсы)?

приложение/услуги/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?

Обратите внимание, что имя класса приложения/моделей совпадает с именем класса приложения/служб.

ответ

6

Ведущий :: заставляет интерпретатор Ruby начать определение имени класса из пространства имен верхнего уровня. Это означает, что в случае, если у вас есть класс Foo::Bar::Baz и Boo класс/модуль, определенный как в

  • Foo :: Boo
  • Boo

REFERENCING Boo внутри Foo::Bar::Baz будет на самом деле в конечном итоге к Foo::Boo module/class, тогда как если вы используете ::Boo, он будет соответствовать Boo, потому что разрешение имени будет начинаться с основного пространства имен.

+0

Спасибо - это именно то, что я искал. –