How a Ruby class to initialize all included modules? -
see following sample code first:
module first def initialize puts "second init" end def first puts "first" end end module second def initialize puts "second init" end def second puts "second" end end class myclass include first include second def initialize super() end end c = myclass.new c.first c.second output of program is:
second init first second from output, can see myclass has included first , second modules, because has both first() , second() methods.
in myclass constructor, try initialize both included modules super(), seems second's constructor called.
how initialize included modules?
include inserts module in between present class , ancestors. since first, second included, ancestors of myclass is
[myclass, second, first, ...] the keyword super looks first method available in ancestor class besides own class. , finds second#initialize.
if want accumulate initialize methods of ancestor modules, this:
module first def initialize puts "second init" end end module second include first def initialize super puts "second init" end end class myclass include second def initialize super end end
Comments
Post a Comment