原です。

>けいじゅ@日本ラショナルソフトウェアです.

>module M0
>    def foo; 0; end
>end
>
>class Foo
>    include M0
>end
>
>module S
>   module M0
>     def foo; 1; end
>   end
>end
>
>ScopeS = ScopeInState.new(S)
>
>class Foo             # <- ここがみそ
>    include M0
>end
>
>foo = Foo.new
>p foo.foo #=> 0
>ScopeS.scope_in do
>    p foo.foo #=> 1
>end
>p foo.foo #=> 0
>
>ただ... 『ここがみそ』のところを実行しないとだめなんですが...
>ScopeInState.newでM0の継承列が変更されるのですが, rubyではそれがFooに
>伝達されませんので...

なる程。私は自前で継承列を構築する scope-in-state の強引さ:-)に
感動しました。こんなことができるんだなあと。

で、ちょっと刺激を受けて、エイリアスしまくるのを躊躇しないとした
らどうか、と思って作ったのが import-module です。import-module 
は、include するモジュールの入れ替えが(見た目)できます。例えば

module M0
   def foo; 0; end
end

class Foo
   include M0
end

module M1
   def foo; 1; end
end

o = Foo.new
p o.foo #=> 0
Foo.import_module(M1) do
   p o.foo #=> 1
end
p o.foo #=> 0

です。そもそも import-module では、同一モジュールの重ね include
(に見えること)ができます。

module M0
   def foo; 0; end
end

module M1
   def foo; 1; end
end

class Foo
   include M0
   include M1
end

o = Foo.new
p o.foo #=> 1
Foo.import_module(M0) do
   p o.foo #=> 0
end