craig duncan <duncan / nycap.rr.com> wrote: > > > > > >Yukihiro Matsumoto wrote: [...] > > So to_str is the same as to_s except with an extra assertion > > about the correct usage of that object. > >Wow! That was a little too subtle for me to guess. I think because of the >minimalism that i (initially) perceive to be lacking in this design. >to_str >can always fill in for to_s, yes? So what do you need to_s for? I guess >you >could say that you use to_s when you _don't_ want the object to be used as >a >string . . . even though you want it to _appear_ that way. ? Oh, well, i >guess i can accept that there _might_ be some usage for that distinction >(can't think what, though). Thanks, Ben. Example. Ruby allows you to check whether a string contains a pattern with: /foo/.match str This uses to_str to guarantee that it has a string to work on. Now what happens if you try to match an array? Well it will blow up because this is unlikely to be what you meant. But it won't blow up on exception objects because even though exceptions aren't really strings, it is probably not a sign of confusion to want to check them with an RE match. By contrast there are lots of reasonable situations where you would want to interpolate an array into a string, so that will call to_s instead of to_str. So they are doing the same thing, but you call to_str when you want to make an implicit assertion that what you have is something you should be doing string operations with, and not just something that (like everything) can be described in text. Cheers, Ben _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com