Nick Stoneman10,093 Points
Is anyone able to expand on how the 'to_s' method in the Phone_Number class is accessible to the Contact class?
I'm not clear on how the final method we create at the end of this video is a able to access the to_s method made in the other file. Further, why has the method been called 'to_s'? I'm guessing 'to_s' is actually the ruby 'to string' method. But isn't using an existing ruby method to name OUR method bad form? A bit confused here.
It is my understanding that the require "./filename" line is necessary to reference a class contained in another file. You are correct, the to_s method is short for "to string" and it overrides any existing implementation of to_s.
Daniel Crews14,007 Points
to_s method of the Phone_Number class is accessible because the
phone_number variable is an object of the Phone_Number class. It was instantiated in the line
phone_number = Phone_Number.new
It is idiomatic in Ruby to define a
to_s method in class definitions and not considered bad form. It is used so that calling to
to_s on the object is more informative than the standard implementation. Keep in mind, you're not overriding the String class's
to_s method here. You're defining a new one for the class that you've created.
I was confused about this too but just found a great explanation and example(s) over on rubymonk.com. I'll provide the link below, it's really helpful. It talks about
to_s and how they relate. Wish I read it earlier to be honest. Anyway, according to them
puts outputs (prints) the result of applying
to_s on an object. So in a situation where you decide to override
to_s in your class (like in the video),
puts will automatically take on that new behavior of
to_s. In other words once
to_s got overridden, we were essentially creating a new behavior for
puts as it relates to the PhoneNumber object.
Another thing I found interesting, apparently the overriding of
to_s (within a class) is encouraged to fit the specific needs of your class.