Issue #13559 has been updated by dunrix (Damon Unrix). Eregon (Benoit Daloze) wrote: > In an ideal world, I think #itself with a block doing what #tap does today and #tap doing what #yield_self does would make sense. > But that cannot work with compatibility. This, exactly. Just another reminder how important is think decisions through, before acting.. nobu (Nobuyoshi Nakada) wrote: > > `url.itself { |u| open(u).read } # return "itself -> fetch from the network"` > It does not seem to return something other than url "itself". Yes, result of a block can be anything. I wouldn't expect same object when optional block is passed. Like it already does `Object#tap`, unfortunately. It is all about point of view. ---------------------------------------- Feature #13559: Change implementation of Feature #6721 https://bugs.ruby-lang.org/issues/13559#change-64798 * Author: dunrix (Damon Unrix) * Status: Feedback * Priority: Normal * Assignee: * Target version: ---------------------------------------- Hi, please reconsider implementation of feature request #6721 planned for Ruby 2.5.0 . Instead of introducing new method `Object#yield_self`, just reuse existing `Object#itself` by taking an optional block argument. Find it much clearer and more logical solution, not superfluous polluting of API space. `Object#itself` just returns target object, optional block would return alternative value with target object passed as block argument. Prototyped sol. in Ruby: ~~~ruby class Object def itself block_given? ? yield(self) : self end end ~~~ Not aware of any case, where it would break backward compatibility. -- 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>