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/