String#== returns nil when the object being compared does not have a "to_str" method.
For example:
"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