On Fri, 14 Jul 2006, Sean O'Halpin wrote: > Hmmm. I'm still getting "singleton method called for a different > object (TypeError)" for this (ruby 1.8.4 (2005-12-24) [i386-mswin32]). me too. harp:~ > cat a.rb class X # role of IO class << self def x(*args,&block) # role of open block.call(1764) if block end end end OLD = X.method :x class Y < X # role of File class << self def x; "rubbish"; end end end class Y class << self define_method(:x, OLD ) end end Y.x{|a| puts a } harp:~ > ruby a.rb a.rb:23:in `x': singleton method called for a different object (TypeError) from a.rb:23 harp:~ > ruby -v && cat /etc/redhat-release && uname -srm ruby 1.8.4 (2005-12-01) [i686-linux] Red Hat Enterprise Linux WS release 3 (Taroon Update 7) Linux 2.4.21-40.EL i686 you robert? btw. this challenge was not arbitrary: the increase in metaprogramming popularity means people are doing things like def class_method alias '__instance_method__', 'instance_method' # push define_method 'instance_method' do # ... __instance_method__ 42 # ... end ensure alias 'instance_method', '__instance_method__' # pop end but this is neither thread safe (easy to fix) or re-entrant (not easy to fix). what i mean is doing class_method{ class_method{ } } blows up. to avoid this i wanted to develop this pattern def class_method __instance_method__ = method 'instance_method' # push define_method 'instance_method' do # ... __instance_method__.call 42 # ... end ensure define_method 'instance_method', __instance_method__ # pop end but, of course, we are seeing that it doesn't work. regards. -a -- suffering increases your inner strength. also, the wishing for suffering makes the suffering disappear. - h.h. the 14th dali lama