In Ruby, modules can include other modules, as a form of multiple inheritance. To test this, I wrote the following program based on an example from an article on linearizing C3:
module O
def doIt()
super if defined?(super)
puts "O"
end
end
module F
include O
def doIt()
super if defined?(super)
puts "F"
end
end
module E
include O
def doIt()
super if defined?(super)
puts "E"
end
end
module D
include O
def doIt()
super if defined?(super)
puts "D"
end
end
module C
include F
include D
def doIt()
super if defined?(super)
puts "C"
end
end
module B
include E
include D
def doIt()
super if defined?(super)
puts "B"
end
end
class A
include C
include B
def doIt()
super if defined?(super)
puts "A"
end
end
A.new.doIt
What (on Ruby 1.9.3) outputs:
O
F
E
D
C
B
A
How does Ruby determine the resolution order of a method in this case?
source
share