Feature #8761
Updated by ko1 (Koichi Sasada) over 11 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.