Project

General

Profile

Actions

Feature #12042

closed

A better interface that returns a list of local variables available where the exception is raised

Added by yuki24 (Yuki Nishijima) about 8 years ago. Updated about 8 years ago.

Status:
Feedback
Assignee:
-
Target version:
-
[ruby-core:73629]

Description

We've changed the behavior of NameError#local_variables as discussed on #11777, but I'm not actually satisfied by the change. This change has made it impossible to get a list of local variables available within a NameError scope. It would be nice, if we could add a new method that does what NameError#local_variables does right now, and change the local_variables method back to the previous behavior.

I actually don't have a good name in mind, but please let me know if anyone has a good name for it.

Updated by nobu (Nobuyoshi Nakada) about 8 years ago

  • Status changed from Open to Feedback

I'm uncertain about what you mean by "change".
Could you elaborate the behavior what you expect?

Updated by yuki24 (Yuki Nishijima) about 8 years ago

As you may know, in Ruby 2.2 and older, #local_variables 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:

class NameError
  def call_local_variables
    foo = bar = nil
    local_variables
  end
end

the_value = nil

begin
  doesnt_exist
rescue => e
  # Ruby 2.2 and older
  e.local_variables      # => NoMethodError: private method `local_variables' called...
  e.call_local_variables # => [:foo, :bar]
end

We've changed it to behave like the following:

... # same setup

begin
  doesnt_exist
rescue => e
  # Ruby 2.3 (current)
  e.local_variables      # => [:the_value]
  e.call_local_variables # => [:the_value]
end

And an example of what I would like to add/change would be something like:

... # same setup

begin
  doesnt_exist
rescue => e
  # Ruby 2.4
  e.local_variables      # => NoMethodError: private method `local_variables' called...
  e.call_local_variables # => [:foo, :bar]
  e.something_new        # => [:the_value]
end

Updated by nobu (Nobuyoshi Nakada) about 8 years ago

Rename NameError#local_variables not to override Kernel#local_variables?

Do you have candidates for that name?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0