Как отличить класс "ClassA" от "Module :: ClassA"? - PullRequest
0 голосов
/ 09 ноября 2010

Итак, моя проблема в том, что у меня есть два класса с одинаковым именем.

Один из них - REXML :: Document, являющийся сторонней библиотекой.

Другой - это модель ActiveRecord, которая называется«Документ» контролируется моим приложением.

В моем контроллере, когда я выполняю «Document.transaction», он говорит мне, что метод «транзакция» не существует для класса «REXML :: Document», но что я действительно хочуэто использовать мою модель.Моя модель не принадлежит модулю, так как я могу сказать ruby, что он должен смотреть на модель "Document" вместо "REXML :: Document"?

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

::Document говорит Ruby запустить поиск имени на верхнем уровне, в отличие от текущего уровня.

Это похоже на путь к Unix, где / также функционирует как разделитель компонентов пути и как флаг, чтобы не использовать относительный поиск.

Однако, если вы находитесь внутри своего контроллера, Document само по себе не должно никогда ссылаться на REXML::Document. всегда должен искать только Document, сначала в текущем пространстве имен, затем на один уровень вверх и т. Д. До пространства имен верхнего уровня (что на самом деле ничего особенного, это просто класс Object ).

Если, конечно, где-то в вашем коде нет include REXML, в этом случае есть еще более простое средство, чем использование ::Document: просто не делайте этого.

0 голосов
/ 09 ноября 2010

Да, я думаю, этот вопрос дублируется.В любом случае ответом будет использование ::Document, хотя я бы подумал, что просто набрав Document, предпочтет Document REXML::Document

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...