https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112016-02-01T12:30:14ZRuby Issue Tracking SystemRuby master - Feature #12042: A better interface that returns a list of local variables available where the exception is raisedhttps://bugs.ruby-lang.org/issues/12042?journal_id=568252016-02-01T12:30:14Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Feedback</i></li></ul><p>I'm uncertain about what you mean by "change".<br>
Could you elaborate the behavior what you expect?</p> Ruby master - Feature #12042: A better interface that returns a list of local variables available where the exception is raisedhttps://bugs.ruby-lang.org/issues/12042?journal_id=568392016-02-02T13:29:50Zyuki24 (Yuki Nishijima)yk.nishijima@gmail.com
<ul></ul><p>As you may know, in Ruby 2.2 and older, <code>#local_variables</code> returns a list of local variables available in the scope where the method is called, or raises an NameError if it's called from outside of the class:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">NameError</span>
<span class="k">def</span> <span class="nf">call_local_variables</span>
<span class="n">foo</span> <span class="o">=</span> <span class="n">bar</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="nb">local_variables</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">the_value</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="k">begin</span>
<span class="n">doesnt_exist</span>
<span class="k">rescue</span> <span class="o">=></span> <span class="n">e</span>
<span class="c1"># Ruby 2.2 and older</span>
<span class="n">e</span><span class="p">.</span><span class="nf">local_variables</span> <span class="c1"># => NoMethodError: private method `local_variables' called...</span>
<span class="n">e</span><span class="p">.</span><span class="nf">call_local_variables</span> <span class="c1"># => [:foo, :bar]</span>
<span class="k">end</span>
</code></pre>
<p>We've changed it to behave like the following:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="o">...</span> <span class="c1"># same setup</span>
<span class="k">begin</span>
<span class="n">doesnt_exist</span>
<span class="k">rescue</span> <span class="o">=></span> <span class="n">e</span>
<span class="c1"># Ruby 2.3 (current)</span>
<span class="n">e</span><span class="p">.</span><span class="nf">local_variables</span> <span class="c1"># => [:the_value]</span>
<span class="n">e</span><span class="p">.</span><span class="nf">call_local_variables</span> <span class="c1"># => [:the_value]</span>
<span class="k">end</span>
</code></pre>
<p>And an example of what I would like to add/change would be something like:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="o">...</span> <span class="c1"># same setup</span>
<span class="k">begin</span>
<span class="n">doesnt_exist</span>
<span class="k">rescue</span> <span class="o">=></span> <span class="n">e</span>
<span class="c1"># Ruby 2.4</span>
<span class="n">e</span><span class="p">.</span><span class="nf">local_variables</span> <span class="c1"># => NoMethodError: private method `local_variables' called...</span>
<span class="n">e</span><span class="p">.</span><span class="nf">call_local_variables</span> <span class="c1"># => [:foo, :bar]</span>
<span class="n">e</span><span class="p">.</span><span class="nf">something_new</span> <span class="c1"># => [:the_value]</span>
<span class="k">end</span>
</code></pre> Ruby master - Feature #12042: A better interface that returns a list of local variables available where the exception is raisedhttps://bugs.ruby-lang.org/issues/12042?journal_id=568542016-02-03T05:10:08Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>Rename <code>NameError#local_variables</code> not to override <code>Kernel#local_variables</code>?</p>
<p>Do you have candidates for that name?</p>