String#==

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

I'm in no way authoritative, but it makes sense to me. If you're
trying to see if a String is "equal" to something that cant be
converted to a string, 'nil' (as false) seems logical.

···

On Mon, 14 Jun 2004 01:20:16 +0900, Charles Mills <cmills@freeshell.org> wrote:

String#== returns nil when the object being compared does not have a
"to_str" method.
For example:
> "hey" == 1
=> nil
Is that correct?

Hi,

···

In message "String#==" on 04/06/14, Charles Mills <cmills@freeshell.org> writes:

String#== returns nil when the object being compared does not have a
"to_str" method.

In 1.8.2 and 1.9, it will return false.

              matz.