Michael's answer seems to solve your question... still, I read the question a bit differently and discovered something really nice that I thought worth sharing.
I understood your question as: "What do I do if I want to require two modules of the same name?", that is, how could I alias them if requiring both would result in a namespace clash? Because, as far as my understanding of Python's 'import ... as ...' goes, it also solves those kinds of problems. An example in Ruby:
#file a.rb
module A
def self.greet
puts 'A'
end
end
#file b.rb
module A
def self.greet
puts 'other A'
end
end
Now if I would do this in a third file:
require_relative 'a'
require_relative 'b'
A.greet # => other A
the first A would be completely overridden by the A in b.rb. Using Michael's trick also won't help:
require_relative 'a'
TMP_A = A
A.greet # => A
TMP_A.greet # => A
require_relative 'b'
TMP_A2 = A
A.greet # => other A
TMP_A2.greet # => other A
TMP_A.greet # => other A :(
Too bad. Then I thought, well, in Ruby there's the ubiquitous dup
for making a clone of basically everything and without too much hope I just typed this and reran the program:
require_relative 'a'
TMP_A = A.dup
A.greet # => A
TMP_A.greet # => A
require_relative 'b'
TMP_A2 = A
A.greet # => other A
TMP_A2.greet # => other A
TMP_A.greet # => A :P
That totally made my day, hope you guys appreciate it as much as well. Now that I think about it, it makes sense - a module is an object like any other after all, so why shouldn't dup
work?
require
andinclude
are very different in ruby. They are not interchangeable with each other. – Lingerie