From: Tadashi Saito Date: 2003-07-22T00:05:12+09:00 Subject: [ruby-dev:20759] "==" behavior difference between comparable classes 斎藤です。 リファレンスマニュアル http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Comparable によると、1.8のComparableモジュールの機能として 「self == other  … ruby 1.8 feature: <=> が nil を返したとき nil を返します。」 とあります。 実際、ComparableをincludeしているTimeクラスでは % ruby -ve 't=Time.now; p t<=>1, t==1' ruby 1.8.0 (2003-07-19) [i686-linux] nil nil となります。 ところが、同じようにComparableをincludeしているクラスである NumericとStringでも、結果が異なります。 % ruby -e 't=Time.now; p 1<=>t, 1==t' nil false % ruby -e 't=Time.now; p "1"<=>t, "1"==t' nil false これは、<=>がnilを返す場面では、Numericの各サブクラスと Stringにおける「==」が Comparableによるもの(cmp_equal)では なく、num_equal中のObject#===(rb_equal)の呼び出しになっている ためだと思います。 この振る舞いの違いは、どのような意図によるものなのでしょうか。 -- 斎藤ただし