Em 29-11-2012 23:42, Yukihiro Matsumoto escreveu:
> |  class C
> |    def foo; p :C; end
> |  end
> |  module M1
> |    refine String do def foo; p :M1; super; end; end
> |  end
> |  module M2
> |    include M1
> |    refine String do def foo; p :M2; super; end; end
> |  end
> |  using M2
> |  C.new.foo #=>  ?
> |
> |I think it's better to just calls M2 and C, not M1, to simplify things.
> |super chain is too complex here.
>
> I was thinking of M2->M1->C, but M2->C is simpler and acceptable.

I'm worried about this. We shouldn't be defining this behavior in light 
of what is simple/feasible until 2.0 release. Because if this decision 
changes later it will be backward incompatible and it is most likely 
that we won't be able to change this behavior in the future to keep 
compatibility.

It would be better to think well about this now. What is the really 
desired behavior in the long-run to avoid compatibility issues in the 
future?