"Lloyd Zusman" <ljz / asfast.com> schrieb im Newsbeitrag news:m3vf968oa9.fsf / asfast.com... > I'm wondering if something like this is possible: > > module Intercept > def intercept_initialize > puts "performing Intercept#intercept_initialize" > # somehow call containing class's 'initialize' method here > end > end > > class Foo > def initialize > puts "performing Foo#initialize" > end > end > > class Bar > include Intercept > def initialize > puts "performing Bar#initialize" > end > end > > puts "instatiating Foo" > Foo.new > puts "instatiating Bar" > Bar.new > puts "done" > > Desired results: > > instantiating Foo > performing Foo#initialize > instantiating Bar > performing Intercept#intercept_initialize > performing Bar#initialize > done > > In other words, simply by including the "Intercept" module in a class, > I'd like to intercept that class's call to "initialize" and have the > Intercept module's code get invoked first, and _then_ the containing > class's "initialize" method should be called as it normally would. > > Is this possible? If so, how? The proper way is to use super IMHO: module Intercept def initialize(*a,&b) super puts "performing Intercept#intercept_initialize" # somehow call containing class's 'initialize' method here end end class Foo def initialize super puts "performing Foo#initialize" end end class Bar include Intercept def initialize super puts "performing Bar#initialize" end end All other suggested approaches (changing a class's new or using a hook) are more complicated than necessary IMHO. Kind regards robert