Issue #10095 has been updated by Shyouhei Urabe.


Tsuyoshi Sawada wrote:
> So, I would like to make a proposal such that, when `instance_eval` takes a block parameter, do not switch the context, and just pass the receiver through the block parameter. This will remove the slowness of the method in the relevant case, and provides the feature we want.

-1.  You cannot access for example instance variables without changing context.  instance_eval's changing context is the nature of eval.  Please don't.

----------------------------------------
Feature #10095: Object#as
https://bugs.ruby-lang.org/issues/10095#change-58364

* Author: Akira Matsuda
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
We've had so many times of feature requests for a method similar to Object#tap that doesn't return self but returns the given block's execution result (e.g. #7388, #6684, #6721 ).

I'm talking about something like this in Ruby of course:
Object.class_eval { def as() yield(self) end }

IIRC Matz is not against introducing this feature but he didn't like any of the names proposed in the past, such as embed, do, identity, ergo, reference, yield_self, itself, apply, map, tap!, etc.

So, let us propose a new name, Object#as today.
It's named from the aspect of the feature that it gives the receiver a new name "as" a block local variable.
For instance, the code reads so natural and intuitive like this:

(1 + 2 + 3 + 4).as {|x| x ** 2}
=> 100

Array.new.as {|a| a << 1; a << 2}
=> [1, 2]

---Files--------------------------------
itself-block.patch (1.35 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>