From: Robert Dober Date: 2008-11-16T00:06:04+09:00 Subject: Re: Class.new and class keyword not the same? On Fri, Nov 14, 2008 at 5:09 PM, Trans wrote: > Here the normal scenario: > > class X > def self.inherited(s) > p "here" > end > end > > class Z < X > p "race" > end > > result: > > "here" > "race" > > But in a test case of mine I need the class to be a variable, but: > > z = Class.new(X) do > p "race" > end > > result: > > "race" > "here" > > Why is "race" coming before "here"? > > ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux] > > T. > > Strange, it is "fixed" in 1.9 (though I have an old version ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux] ). But but then Jruby behaves like 1.8, maybe this is defined somewhere? If we look at the warning below it really seems like a bug, 'cause the old method is *not* discarded. 516/16 > cat xxx.rb && ruby1.9 -v xxx.rb && ruby -v xxx.rb && jruby -v xxx.rb class X def self.inherited(x); x.send :define_method, :a do puts 42 end end end class Y < X def a; puts "21*2" end end Y::new.a puts "-"*72 Class::new Y do def a; puts "222.to_i(4)" end end::new.a ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux] xxx.rb:11: warning: method redefined; discarding old a 21*2 ------------------------------------------------------------------------ xxx.rb:16: warning: method redefined; discarding old a 222.to_i(4) ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-linux] xxx.rb:11: warning: method redefined; discarding old a 21*2 ------------------------------------------------------------------------ 42 ruby 1.8.6 (2008-05-30 rev 6360) [i386-jruby1.1] 21*2 ------------------------------------------------------------------------ 42 Any views on this? Cheers Robert