module Hah
class String
#...
end
end
примерно эквивалентно:
class Hah::String
#...
end
, который делает класс Hah::String
и не ссылается на класс String
в глобальном пространстве имен. Обратите внимание, что последний работает, только если module Hah
уже был объявлен (с ключевым словом module
, Module.new
и т. Д.), Тогда как первый объявляет или повторно открывает module Hah
, а затем в этой области объявляет или повторно открывает class String
, что в контексте неявно class Hah::String
.
Чтобы открыть класс String
в глобальном пространстве имен, используйте:
module Hah
class ::String
#...
end
end
потому что ::String
ссылается на класс String
строго в верхнем уровне / глобальном пространстве имен.