Feature #8761

Binding#local_variable_get, set, defined?

Added by Koichi Sasada 9 months ago. Updated 7 months ago.

[ruby-core:56471]
Status:Closed
Priority:Normal
Assignee:Koichi Sasada
Category:core
Target version:2.1.0

Description

I propose new 3 methods of Binding.

  • Binding#localvariableget(sym)
  • Binding#localvariableset(sym)
  • Binding#localvariabledefined?(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#localvariableget(sym)

def access begin: 0, end: 100
p(binding.localvariableget(:begin)) #=> 0
p(binding.localvariableget(:end)) #=> 100
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#localvariableset 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.

History

#1 Updated by Koichi Sasada 9 months ago

  • Category set to core
  • Target version set to 2.1.0

#2 Updated by Koichi Sasada 9 months ago

  • Description updated (diff)

#3 Updated by Koichi Sasada 7 months 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