Модуль и класс с тем же именем в Ruby - PullRequest
0 голосов
/ 09 апреля 2020

Скажем, например, у меня есть модуль 'A' и модуль 'B' . В модуле B есть класс с именем 'A' , такой же, как module 'A' . Внутри этого класса я хочу сослаться на A :: Class C, где ' A ' - это модуль, но я получаю ошибки, потому что он думает, что ссылается на класс A , который не имеет класса C. Могу ли я обойти это? Или мне нужно переименовать один? (Я бы хотел как можно больше этого избегать)

edit:

Вот пример моей текущей реализации, которая не работает для справки.

    >moduleA
        >classC.rb
    >moduleB
        >classA.rb
        >classB.rb

classA.rb:

module B
    class A < classB

    do something with A::ClassC

    end
end

Ошибка uninitialized constant ModuleB::ClassA::ClassC

1 Ответ

2 голосов
/ 09 апреля 2020

Используйте оператор разрешения области действия ::, чтобы решить, из какого класса области действия можно найти C.
В вашем случае вам нужна "основная" область действия, поэтому используйте оператор :: в качестве префикса - ::A::C

module A
  class C
    def name
      "I am class C from module A"
    end
  end
end

module B
  class A
    def test
      ::A::C.new.name
    end
  end
end

name = B::A.new.test
# => "I am class C from module A"
...