Project

General

Profile

Feature #8761

Updated by ko1 (Koichi Sasada) over 10 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. 

Back