https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2018-03-28T22:01:26Z
Ruby Issue Tracking System
Ruby master - Bug #14641: Shouldn't Array#map not modify its array?
https://bugs.ruby-lang.org/issues/14641?journal_id=71297
2018-03-28T22:01:26Z
jeremyevans0 (Jeremy Evans)
merch-redmine@jeremyevans.net
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Rejected</i></li></ul><p>The array itself is not modified, you are mutating elements of the current array during iteration (as String#<< mutates the receiver), then returning a new array with the mutated elements (since String#<< returns the receiver). If you don't want to mutate the elements, use String#+:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">001</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">]</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">002</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">map</span><span class="p">{</span><span class="o">|</span><span class="n">e</span><span class="o">|</span> <span class="n">e</span> <span class="o">+</span> <span class="s1">'c'</span><span class="p">}</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"ac"</span><span class="p">,</span> <span class="s2">"bc"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">003</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">004</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">object_id</span>
<span class="o">=></span> <span class="mi">11790377160340</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">005</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">map</span><span class="p">{</span><span class="o">|</span><span class="n">e</span><span class="o">|</span> <span class="n">e</span> <span class="o"><<</span> <span class="s1">'c'</span><span class="p">}.</span><span class="nf">object_id</span>
<span class="o">=></span> <span class="mi">11788696580840</span>
</code></pre>
Ruby master - Bug #14641: Shouldn't Array#map not modify its array?
https://bugs.ruby-lang.org/issues/14641?journal_id=71319
2018-03-29T15:38:46Z
hartator (Julien Khaleghy)
<ul></ul><p>jeremyevans0 (Jeremy Evans) wrote:</p>
<blockquote>
<p>The array itself is not modified, you are mutating elements of the current array during iteration (as String#<< mutates the receiver), then returning a new array with the mutated elements (since String#<< returns the receiver). If you don't want to mutate the elements, use String#+:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">001</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">]</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">002</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">map</span><span class="p">{</span><span class="o">|</span><span class="n">e</span><span class="o">|</span> <span class="n">e</span> <span class="o">+</span> <span class="s1">'c'</span><span class="p">}</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"ac"</span><span class="p">,</span> <span class="s2">"bc"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">003</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">004</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">object_id</span>
<span class="o">=></span> <span class="mi">11790377160340</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">005</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">a</span><span class="p">.</span><span class="nf">map</span><span class="p">{</span><span class="o">|</span><span class="n">e</span><span class="o">|</span> <span class="n">e</span> <span class="o"><<</span> <span class="s1">'c'</span><span class="p">}.</span><span class="nf">object_id</span>
<span class="o">=></span> <span class="mi">11788696580840</span>
</code></pre>
</blockquote>
<p>It was my bad. Thanks for the explanation, Jeremy.</p>