Here is a trick to bake a module’s methods directly into a class:
module M def hello puts "hello defined in M" end end class C include M alias_method :hello, :hello end
The magic is in the line
alias_method :hello, :hello. This code creates an alias for the
hello method defined in
M directly on the
C class itself.
C.instance_method(:hello).owner #=> C
hello method is now safe from being accidentally overridden by other modules included subsequently:
module J def hello puts "hello defined in J" end end class C include J end C.new.hello #=> "hello defined in M"
Note that this trick only works in Ruby 1.9 as `
alias_method :meth, :meth` in Ruby 1.8 appears to be a no-op.