Feature #8761

Binding#local_variable_get, set, defined?

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

Target version:


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

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

(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
and Matz accepted it.


#1 [ruby-core:56473] Updated by ko1 (Koichi Sasada) over 3 years ago

  • Category set to core
  • Target version set to 2.1.0

#2 [ruby-core:56488] Updated by ko1 (Koichi Sasada) over 3 years ago

  • Description updated (diff)

#3 [ruby-core:57478] Updated by ko1 (Koichi Sasada) over 3 years ago

  • Status changed from Open to Closed

Introduced r42464 and there are no objection.
Close this ticket as accepted feature.

Also available in: Atom PDF