https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112017-12-14T07:24:27ZRuby Issue Tracking SystemRuby master - Bug #12717: Optional argument treated as kwarghttps://bugs.ruby-lang.org/issues/12717?journal_id=683972017-12-14T07:24:27Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-5 priority-4 priority-default closed" href="/issues/14183">Feature #14183</a>: "Real" keyword argument</i> added</li></ul> Ruby master - Bug #12717: Optional argument treated as kwarghttps://bugs.ruby-lang.org/issues/12717?journal_id=739002018-09-05T15:22:51Zmarcandre (Marc-Andre Lafortune)marcandre-ruby-core@marc-andre.ca
<ul></ul><p>I believe this is as designed.</p>
<p>As I stated previously (<a href="https://bugs.ruby-lang.org/issues/11967#note-3" class="external">https://bugs.ruby-lang.org/issues/11967#note-3</a>), my understanding is that:</p>
<ul>
<li>after all mandatory unnamed arguments are filled</li>
<li>if the last remaining argument is hash-like</li>
<li>and all its keys are symbols</li>
<li>and the method called uses keyword arguments => then that parameter is used for keyword arguments.</li>
</ul>
<p>I believe we should close this issue.</p> Ruby master - Bug #12717: Optional argument treated as kwarghttps://bugs.ruby-lang.org/issues/12717?journal_id=739032018-09-05T15:26:11Zmarcandre (Marc-Andre Lafortune)marcandre-ruby-core@marc-andre.ca
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/13336">Bug #13336</a>: Default Parameters don't work</i> added</li></ul> Ruby master - Bug #12717: Optional argument treated as kwarghttps://bugs.ruby-lang.org/issues/12717?journal_id=812992019-08-30T21:46:24Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>With the changes in <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: "Real" keyword argument (Closed)" href="https://bugs.ruby-lang.org/issues/14183">#14183</a>:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Foo</span><span class="p">.</span><span class="nf">options</span><span class="p">({})</span>
<span class="c1"># (irb):21: warning: The last argument for `options' (defined at (irb):6) is used as the keyword parameter</span>
<span class="c1"># nil</span>
<span class="c1"># {}</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">kwarg</span><span class="p">({})</span>
<span class="c1"># (irb):22: warning: The last argument for `kwarg' (defined at (irb):11) is used as the keyword parameter</span>
<span class="c1"># nil</span>
<span class="c1"># nil</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">splat</span><span class="p">({})</span>
<span class="c1"># (irb):23: warning: The last argument for `splat' (defined at (irb):16) is used as the keyword parameter</span>
<span class="c1"># []</span>
<span class="c1"># nil</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">options</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># (irb):24: warning: The last argument for `options' (defined at (irb):6) is used as the keyword parameter</span>
<span class="c1"># nil</span>
<span class="c1"># {:key=>:value}</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">kwarg</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># (irb):25: warning: The last argument for `kwarg' (defined at (irb):11) is used as the keyword parameter</span>
<span class="c1"># ArgumentError (unknown keyword: :key)</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">splat</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># (irb):26: warning: The last argument for `splat' (defined at (irb):16) is used as the keyword parameter</span>
<span class="c1"># ArgumentError (unknown keyword: :key)</span>
</code></pre>
<p>In Ruby 3, the behavior will be:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Foo</span><span class="p">.</span><span class="nf">options</span><span class="p">({})</span>
<span class="c1"># {}</span>
<span class="c1"># {}</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">kwarg</span><span class="p">({})</span>
<span class="c1"># {}</span>
<span class="c1"># nil</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">splat</span><span class="p">({})</span>
<span class="c1"># [{}]</span>
<span class="c1"># nil</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">options</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># {:key=>:value}</span>
<span class="c1"># {}</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">kwarg</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># {:key=>:value}</span>
<span class="c1"># nil</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">splat</span><span class="p">({</span> <span class="ss">key: :value</span> <span class="p">})</span>
<span class="c1"># [{:key=>:value}]</span>
<span class="c1"># nil</span>
</code></pre>
<p>I'm going to close this now as the deprecation warnings for the cases where behavior will change in Ruby 3 have been added.</p>