From: 7stud -- Date: 2009-09-14T03:34:09+09:00 Subject: Re: module to overwrite method defined via define_method Can anyone explain this one: module Redef def foo puts "'foo' from module" end end class A define_method("foo") do puts "'foo' from define_method" end def initialize class << self include Redef end end #include Redef end p A.ancestors a = A.new a.foo --output:-- [A, Object, Kernel] 'foo' from module As expected, the version of foo in a's singleton class is found before the version of foo in class A in the method lookup before. But what about here: module Redef def foo puts "'foo' from module" end end class A define_method("foo") do puts "'foo' from define_method" end def initialize class << self include Redef end end include Redef #<---*****CHANGE HERE end p A.ancestors a = A.new a.foo I would expect the order of the look up for the foo method to be: a's singleton class ==> 'foo from module' a's class(=A) ==> 'foo from define method' a's mixins(=Redef) ==> 'foo from module' But the output is: [A, Redef, Object, Kernel] 'foo' from define_method -- Posted via http://www.ruby-forum.com/.