From: Martin DeMello Date: 2003-01-06T00:57:58+09:00 Subject: Accessing a block's "receiver" I was writing the following piece of code: class String def title_case(exceptions = []) exclude = %w(a an the some and but or not for) + exceptions split(/\b/).map_with_index {|w, i| (exclude.include?(w) or ((i>1) && self[i-1] == "'" && self[i-2] =~ /w/)) ? w : w.capitalize }.join.capitalize end end when I realised that 'self' was not what I wanted, since it belongs to the block definition scope. What I want is a way to get at the anonymous self.split object to which the block is passed - i.e. a variable recv, analogous to self, that gets set when a block is yielded to or a proc is called. As it stands, I have to introduce a separate variable, b, just so I can say b = split(/\b\); b.map_with_index {|w,i| ... b[i] ...} - this *feels* like it should be unnecessary. What would be nice would be for 'yield args' to implicitly be 'yield self, args', proc.call(*args) be proc.call(self, args) and {|args| ...} be {|recv, args| }. Good idea? Bad idea? Disastrously bad idea? :) martin