From: "ko1 (Koichi Sasada)" Date: 2013-08-09T18:56:43+09:00 Subject: [ruby-core:56473] [ruby-trunk - Feature #8761] Binding#local_variable_get, set, defined? Issue #8761 has been updated by ko1 (Koichi Sasada). Category set to core Target version set to current: 2.1.0 ---------------------------------------- Feature #8761: Binding#local_variable_get, set, defined? https://bugs.ruby-lang.org/issues/8761#change-41020 Author: ko1 (Koichi Sasada) Status: Open Priority: Normal Assignee: ko1 (Koichi Sasada) Category: core Target version: current: 2.1.0 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)) #=> syntax error p(binding.local_variable_get(:end)) #=> 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. -- http://bugs.ruby-lang.org/