斎藤です。

リファレンスマニュアル
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)の呼び出しになっている
ためだと思います。

この振る舞いの違いは、どのような意図によるものなのでしょうか。

--
斎藤ただし