From: Charles Mills Date: 2004-06-14T01:20:16+09:00 Subject: String#== String#== returns nil when the object being compared does not have a "to_str" method. For example: irb> "hey" == 1 => nil Is that correct? Here is the code (from 1.8.1): /* taken from string.c line 792 */ static VALUE rb_str_equal(str1, str2) VALUE str1, str2; { if (str1 == str2) return Qtrue; if (TYPE(str2) != T_STRING) { if (!rb_respond_to(str2, rb_intern("to_str"))) { return Qnil; } return rb_equal(str2, str1); } if (RSTRING(str1)->len == RSTRING(str2)->len && rb_str_cmp(str1, str2) == 0) { return Qtrue; } return Qfalse; } /* ... snip ... */ rb_define_method(rb_cString, "==", rb_str_equal, 1); /* end */ -Charlie