https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2024-02-19T13:40:42Z
Ruby Issue Tracking System
Ruby master - Feature #11446: Possible work around for the requirement to supplying arguments like this: .map(&:method, <arguments>)
https://redmine.ruby-lang.org/issues/11446?journal_id=106877
2024-02-19T13:40:42Z
artemb (Artem Borodkin)
<ul></ul><p>Are there any proposal issues regarding the addition of argument and block support for the <code>.each(&:method, args) do; end</code> syntax?</p>
<p>It seems quite feasible to support it natively.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">Enumerable</span>
<span class="k">def</span> <span class="nf">each_call</span><span class="p">(</span><span class="nb">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&</span><span class="p">)</span> <span class="o">=</span> <span class="n">each</span> <span class="p">{</span> <span class="n">_1</span><span class="p">.</span><span class="nf">send</span> <span class="nb">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&</span> <span class="p">}</span>
<span class="k">def</span> <span class="nf">map_call!</span><span class="p">(</span><span class="nb">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&</span><span class="p">)</span> <span class="o">=</span> <span class="n">map!</span> <span class="p">{</span> <span class="n">_1</span><span class="p">.</span><span class="nf">send</span> <span class="nb">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&</span> <span class="p">}</span>
<span class="c1"># ...</span>
<span class="k">end</span>
<span class="c1"># [1,2].map! &:+, 1</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">].</span><span class="nf">map_call!</span> <span class="p">:</span><span class="o">+</span><span class="p">,</span> <span class="mi">1</span>
<span class="c1"># [].each &:instance_eval do</span>
<span class="sx">%w[1 2]</span><span class="p">.</span><span class="nf">each_call</span> <span class="ss">:instance_eval</span> <span class="k">do</span>
<span class="vi">@v</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">end</span>
</code></pre>