oop/module_reopening.rb
tests/_examples/oop/module_reopening.rb in the metorex repository.
# The `module` keyword opens a module of its own when the name stands for
# something else, and refuses a name already bound to something that is not a
# module.
module Holder
Named = "a string"
class Inner; end
end
begin
module Holder::Named; end
rescue TypeError => problem
puts problem.message.lines.first
end
begin
module Holder::Inner; end
rescue TypeError => problem
puts problem.message.lines.first
end
module Mixed
module Shared; end
end
class Object
include Mixed
end
module Shared; end
p Mixed::Shared.equal? Object::Shared
first = Module.new
second = Module.new
first::Second = second
::NamedRoot = first
p first.name
p second.name
Output:
Named is not a module
Inner is not a module
false
"NamedRoot"
"NamedRoot::Second"