From: "alexeymuranov (Alexey Muranov)" Date: 2013-02-08T22:41:44+09:00 Subject: [ruby-core:52035] [ruby-trunk - Feature #6721] Object#yield_self Issue #6721 has been updated by alexeymuranov (Alexey Muranov). =begin Here is a "real life" use case. It again has to do with formatting strings. I want to have a list of conference participants in the form: Full Name (Affiliation, academic position) but without empty parentheses or trailing comma if the person has not profided the affiliation or the position. So i did like this: class Participant def full_name_with_affiliation_and_position full_name + lambda { |a_ap| a_ap.empty? ? '' : " (#{ a_ap })" }[[affiliation, academic_position].compact.join(', ')] end end (I will appreciate any more elegant solution.) With (({#yield_self})) (or any other name for it), i would have written: class Participant def full_name_with_affiliation_and_position full_name + [affiliation, academic_position].compact.join(', ')].yield_self { |a_ap| a_ap.empty? ? '' : " (#{ a_ap })" } end end This would be a bit more readable for me. =end ---------------------------------------- Feature #6721: Object#yield_self https://bugs.ruby-lang.org/issues/6721#change-36056 Author: alexeymuranov (Alexey Muranov) Status: Open Priority: Normal Assignee: Category: core Target version: next minor =begin I think the following method is missing from Ruby: class Object def yield_self(*args) yield(self, *args) end end I do not know a good use case, but it looks very natural to me. It can be used in method chains. What do you think? Is there an alternative? =end -- http://bugs.ruby-lang.org/