From: wanabe Date: 2008-08-12T18:49:39+09:00 Subject: [ruby-dev:35830] Re: [Bug:1.9] Time.now <=> SimpleDelegator.new(Time.now) ワナベと申します。 2008/06/09 15:56 Tanaka Akira : > Time.now <=> SimpleDelegator.new(Time.now) が nil になるのは > SimpleDelegator.new(Time.now) <=> Time.now がそうならないの > と違ってよろしくないんじゃないでしょうか。 パッチを書いてみましたが rb_funcall が多く、結果がコストに見合っていない気がします。 なにか良い方法をご存知の方は教えていただけるとありがたいです。 Index: time.c =================================================================== --- time.c (revision 18196) +++ time.c (working copy) @@ -1087,7 +1087,16 @@ if (tobj1->ts.tv_sec > tobj2->ts.tv_sec) return INT2FIX(1); return INT2FIX(-1); } + else if (RTEST(rb_funcall(time2, rb_intern("kind_of?"), 1, rb_cTime))) { + VALUE tmp = rb_funcall(time2, rb_intern("<=>"), 1, time1); + if (NIL_P(tmp)) return Qnil; + if (!FIXNUM_P(tmp)) { + return rb_funcall(LONG2FIX(0), '-', 1, tmp); + } + return LONG2NUM(-FIX2LONG(tmp)); + } + return Qnil; } -- ワナベ