https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112015-12-05T05:32:54ZRuby Issue Tracking SystemRuby master - Bug #11772: Implicit conversion of Array in String interpolation does not call to_strhttps://bugs.ruby-lang.org/issues/11772?journal_id=552462015-12-05T05:32:54Zdanielpclark (Daniel P. Clark)6ftdan@gmail.com
<ul></ul><p>My main point here is that anything that happens within String interpolation is "implicitly" going to be a String. So shouldn't it call <code>to_str</code> before <code>to_s</code> on anything given?</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">B</span>
<span class="k">def</span> <span class="nf">to_str</span>
<span class="s2">"Hello from B"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="s2">"</span><span class="si">#{</span><span class="no">B</span><span class="p">.</span><span class="nf">new</span><span class="si">}</span><span class="s2">"</span>
<span class="c1"># => "#<B:0x00000001969078>" </span>
</code></pre>
<p>Should work as this does.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">B</span>
<span class="k">def</span> <span class="nf">to_s</span>
<span class="s2">"to_s"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="s2">"</span><span class="si">#{</span><span class="no">B</span><span class="p">.</span><span class="nf">new</span><span class="si">}</span><span class="s2">"</span>
<span class="c1"># => "to_s"</span>
</code></pre>
<p>I also realize that having Ruby lookup two methods <code>to_str</code> and then <code>to_s</code> may slow it down and that we don't want to make it slower. Since Ruby is optimized for <code>to_s</code> being called first I think it would be okay to have <code>to_str</code> called second. Even though by definition you would think that an "implicit" method would be the first method called.</p> Ruby master - Bug #11772: Implicit conversion of Array in String interpolation does not call to_strhttps://bugs.ruby-lang.org/issues/11772?journal_id=552472015-12-05T05:54:01Zduerst (Martin Dürst)duerst@it.aoyama.ac.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>As (implicitly) requested at ruby-core:71843.</p> Ruby master - Bug #11772: Implicit conversion of Array in String interpolation does not call to_strhttps://bugs.ruby-lang.org/issues/11772?journal_id=552562015-12-06T04:37:06Zdanielpclark (Daniel P. Clark)6ftdan@gmail.com
<ul></ul><pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">A</span>
<span class="k">undef</span> <span class="ss">:to_s</span>
<span class="k">def</span> <span class="nf">to_str</span>
<span class="s2">"hello world"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="s2">"</span><span class="si">#{</span><span class="no">A</span><span class="p">.</span><span class="nf">new</span><span class="si">}</span><span class="s2">"</span>
<span class="c1">#NoMethodError: undefined method `to_s' for #<A:0x00000000dbea70></span>
<span class="s2">""</span> <span class="o">+</span> <span class="no">A</span><span class="p">.</span><span class="nf">new</span>
<span class="c1"># => "hello world"</span>
</code></pre>
<p>Using <code>+</code> to call <code>to_str</code> feels like JavaScript.</p>