Project

General

Profile

Actions

Feature #8761

closed

Binding#local_variable_get, set, defined?

Added by ko1 (Koichi Sasada) over 11 years ago. Updated about 11 years ago.

Status:
Closed
Target version:
[ruby-core:56471]

Description

I propose new 3 methods of Binding.

  • Binding#local_variable_get(sym)
  • Binding#local_variable_set(sym)
  • Binding#local_variable_defined?(sym)

Maybe you can imagine the behavior.

These methods help the following cases:

(1) Access to special keyword arguments

From Ruby 2.0, we can use keyword arguments. And further more, you can use special keyword named such as if', begin' and `end', the language keyword.

However, of course you can't access the local variable `if', because of syntax error.

For example,

def access begin: 0, end: 100
p(begin) #=> syntax error
p(end) #=> syntax error
end

To access such a special keyword parameter, you can use Binding#local_variable_get(sym)

def access begin: 0, end: 100
p(binding.local_variable_get(:begin)) #=> 0
p(binding.local_variable_get(:end)) #=> 100
end

(2) Create a binding with specific local variables

If you wan to make a binding which contains several local variables, you can use Binding#local_variable_set to do it.
(See [Feature #8643])


Implementation note:
I think Binding is good place to put these methods than Kernel.
Using binding make it clear that it is need to access to a local environment.
It will help optimization (don't interrupt optimization).


You can try these methods on ruby 2.1dev (trunk), committed at r42464.
Your comments are welcome.

This proposal was discussed at dev-meeting at Japan
https://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130727Japan
and Matz accepted it.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0