Here's what I've learned so far.
1) Every object has to_s because Object provides a default implementation.
2) Some classes override to_s to return a more useful String.
3) to_str should only be implemented in classes whose objects can
logically be used as Strings.
If you're going to implement to_str in a class, is there a reason why
it might return something different than to_s? Is one considered a
human-readable representation and the other something else?
I think every time I've implemented to_str (rare for me) it just called to_s, yes, though it's clear others differ on this.
To me, the functionality of the methods isn't what differs so much, it's when they're called. A call to to_s means (to me), convert this object to a String. The more implicit to_str is me telling Ruby, this object behaves as a String.
Ruby seems to back that idea up too:
irb(main):001:0> class A
irb(main):002:1> def to_s; "converted"; end
irb(main):004:0> class B
irb(main):005:1> def to_str; "behaves as"; end
irb(main):007:0> "A String: " + A.new
TypeError: cannot convert A into String
from (irb):7:in `+'
irb(main):008:0> "A String: " + B.new
=> "A String: behaves as"
Isn't "can be logically used as Strings" a somewhat subjective thing?
Clearly it is, yes.
James Edward Gray II
On Aug 26, 2005, at 10:03 AM, Mark Volkmann wrote: