From: "trans (Thomas Sawyer)" Date: 2012-04-15T17:32:07+09:00 Subject: [ruby-core:44366] [ruby-trunk - Feature #6298][Open] Proc#+ Issue #6298 has been reported by trans (Thomas Sawyer). ---------------------------------------- Feature #6298: Proc#+ https://bugs.ruby-lang.org/issues/6298 Author: trans (Thomas Sawyer) Status: Open Priority: Normal Assignee: Category: core Target version: =begin Maybe there is another way to do this, and if so please enlighten me. I have a case where collection of blocks need to be handled as if a single block, e.g. class BlockCollection def initialize(*procs) @procs = procs end def to_proc procs = @procs Proc.new{ |*a| procs.each{ |p| p.call(*a) } } end end The issue with this is with #to_proc. It's not going to do the right thing if a BlockCollection instance is passed to #instance_eval b/c it would not actually be evaluating each internal block via #instance_eval. But if we change it to: def to_proc Proc.new{ |*a| procs.each{ |p| instance_exec(*a, &p) } } end It would do the right thing with #instance_eval, but it would no longer do the right thing for #call, b/c would it evaluate in the context of BlockCollection instance instead of where the blocks weer defined. So, unless there is some way to do this that I do not see, to handle this Ruby would have to provide some means for it. To this end Proc#+ is a possible candidate which could truly combine two procs into one. =end -- http://bugs.ruby-lang.org/