[#56965] [ruby-trunk - Bug #8852][Open] Synology build of ruby-2.0.0-p247 is failing — "barbecuesteve (Steve Sparks)" <sparks@...>

12 messages 2013/09/02

[#57051] [ruby-trunk - Bug #8872][Open] Case statements do not honor a refinement of the '===' method — "jconley88 (Jon Conley)" <schnozberries@...>

21 messages 2013/09/07

[#57058] [ruby-trunk - Bug #8875][Open] Select is not usable with SSLSocket — "headius (Charles Nutter)" <headius@...>

11 messages 2013/09/07

[#57074] [ruby-trunk - Bug #8879][Open] String#to_r fails after moving ruby to other OSX system — "mpapis (Michal Papis)" <mpapis@...>

12 messages 2013/09/08

[#57092] [ruby-trunk - Bug #8883][Open] Rational canonicalization unexpectedly converts to Fixnum — "melquiades (Paul Cantrell)" <cantrell@...>

16 messages 2013/09/09

[#57109] [ruby-trunk - Bug #8886][Open] TracePoint API inconsistence when raise used — deivid (David Rodríguez) <deivid.rodriguez@...>

14 messages 2013/09/10

[#57111] [ruby-trunk - Feature #8887][Open] min(n), max(n), min_by(n), max_by(n) — "akr (Akira Tanaka)" <akr@...>

13 messages 2013/09/10

[#57131] [ruby-trunk - Feature #8895][Open] Destructuring Assignment for Hash — "chendo (Jack Chen)" <ruby-lang@...>

19 messages 2013/09/11

[#57186] [ruby-trunk - Feature #8909][Open] Expand "f" frozen suffix to literal arrays and hashes — "headius (Charles Nutter)" <headius@...>

37 messages 2013/09/14

[#57262] [ruby-trunk - Feature #8921][Open] Allow select, reject, etc to accept a regex — "kyledecot (Kyle Decot)" <kyle.decot@...>

13 messages 2013/09/18

[#57273] [ruby-trunk - Feature #8923][Open] Frozen nil/true/false — "ko1 (Koichi Sasada)" <redmine@...>

13 messages 2013/09/19

[#57353] [ruby-trunk - Feature #8948][Open] Frozen regex — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

19 messages 2013/09/24

[#57385] [ruby-trunk - Bug #8953][Open] `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal — "gfx (Goro Fuji)" <gfuji@...>

12 messages 2013/09/26

[#57396] [ruby-trunk - Feature #8956][Open] Allow hash members delimited by \n inside of {} — "adamdunson (Adam Dunson)" <adam@...>

20 messages 2013/09/26

[ruby-core:57478] [ruby-trunk - Feature #8761][Closed] Binding#local_variable_get, set, defined?

From: "ko1 (Koichi Sasada)" <redmine@...>
Date: 2013-09-30 11:12:38 UTC
List: ruby-core #57478
Issue #8761 has been updated by ko1 (Koichi Sasada).

Status changed from Open to Closed

Introduced r42464 and there are no objection.
Close this ticket as accepted feature.


----------------------------------------
Feature #8761: Binding#local_variable_get, set, defined?
https://bugs.ruby-lang.org/issues/8761#change-42091

Author: ko1 (Koichi Sasada)
Status: Closed
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)) #=> 0
    p(binding.local_variable_get(: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#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/

In This Thread

Prev Next