title: Why do I have to call overridden to_s method explicitly and not implicitly as I would expect with puts
body: <p>Here's the irb session where I have overridden the <code>to_s</code> of String class but had to call <code>to_s</code> explicitly:</p>
  
  <pre><code>➜ irb
  2.2.0 :001 &gt; class String
  2.2.0 :002?&gt;   def to_s
  2.2.0 :003?&gt;     swapcase
  2.2.0 :004?&gt;     end
  2.2.0 :005?&gt;   end
   =&gt; :to_s
  2.2.0 :006 &gt; puts 'hello'
  hello
   =&gt; nil
  2.2.0 :007 &gt; p 'hello'
  "hello"
   =&gt; "hello"
  2.2.0 :008 &gt; puts 'hello'.to_s
  HELLO
   =&gt; nil
  </code></pre>