dblack / rubypal.com writes:
> 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 Qfalse;
>         }
>         return rb_equal(str2, str1);
>     }
>
>     if (RSTRING(str1)->len == RSTRING(str2)->len &&
>         rb_str_cmp(str1, str2) == 0) {
>         return Qtrue;
>     }
>     return Qfalse;
> }
>
> I haven't quite figured out what the point is of testing to see
> whether str2 responds to "to_str", since even if it does, to_str isn't
> called. But I might just have to keep following the trail....

Note the order of arguments.  It means str2#== will be used instead of
String#==.

Steve