From: Qian Jigui Date: 2008-11-20T12:23:45+09:00 Subject: How the Ruby's super work in finding method? When one method defined in many places, I want to use the super to invoke them one by one. This is the code: ######################################### module M def report( a = 4, b =5) p "M report begin: a=#{a},b=#{b}" a = 6 super(a) p "M report end" end end class B def report(a=11,b=12) p "B report 1 begin: a=#{a},b=#{b}" p "B report 1 end" end def report(a=13,b=14) p "B report 2 begin: a=#{a},b=#{b}" #super() p "B report 2 end" end end class C < B def report( a=8,b=9) p "C report 1 begin: a=#{a},b=#{b}" p "C report 1 end" end def report( a=7,b=3) p "C report 2 begin: a =#{a},b=#{b}" super() p "C report 2 End" end include M end class D < C def report( a = 2, b=1) p "D report 1 begin: a=#{a},b=#{b}" super(a,b) p "D report 1 end" end include M def report(a = -2, b=-1) p "D report 2 begin: a=#{a},b=#{b}" super p "D report 2 end" end end d = D.new d.report ######################################### That's the output: :!ruby testMethodGet.rb "D report 2 begin: a=-2,b=-1" "C report 2 begin: a =-2,b=-1" "M report begin: a=4,b=5" "B report 2 begin: a=6,b=14" "B report 2 end" "M report end" "C report 2 End" "D report 2 end" I find sometimes it will invoke the super class' method first(D->C->M), but it will invoke the module's method first(C->M->B) too. I know I include the module in different place in the different classes. But I don't know the strange working . Can anyone find the problem? -- Posted via http://www.ruby-forum.com/.