ruby :: Модуль или просто Модуль - PullRequest
8 голосов
/ 16 мая 2011

Я медленно пробираюсь через источник рельсов, чтобы лучше контролировать рубин и рельсы в целом.В следующих классах рельсов test_case.rb

строка имеет вид

 class TestCase < ::Test::Unit::TestCase

, и мне было интересно, есть ли разница в выполнении следующих действий

 class TestCase < Test::Unit::TestCase

Это может показаться тривиальным, но эти вещи имеют значение, подбирая новый язык.Тесты все еще выполняются для ActiveSupport, если я удаляю ведущий :: так, что он делает ...: P

Ответы [ 2 ]

8 голосов
/ 16 мая 2011

::Test гарантирует, что вы получите модуль верхнего уровня с именем Test.

Последний случай (Test::Unit::TestCase) не гарантирует, что Test является модулем верхнего уровня, это может быть, например, класс. Это означает, что большую часть времени это будет работать, но вы можете случайно его сломать.

5 голосов
/ 16 мая 2011

Представьте, что у вас есть этот код

module UserTesting
   class Test # Details about a simple test
   end


   class TestCases < Test::Unit::TestCase
   end
end
# => NameError: uninitialized constant UserTesting::Test::Unit

Это приведет к ошибке, поскольку ваша тестовая константа, доступная для создаваемого вами класса, не содержит в себе постоянной единицы.Если вы обращаетесь к нему с помощью ::, это похоже на начальную косую черту в пути.

Существует также особый случай их использования - вы можете оценивать свой код в другом месте, кроме корневого пространства имен по умолчанию, и тамна самом деле нужно двойное двоеточие для адресации таких классов, как :: Object (обычно для их обезьяны).

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