Feature #8761
Updated by ko1 (Koichi Sasada) about 12 years ago
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 syntax error
p(binding.local_variable_get(:end)) #=> 100 syntax error
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.