From: Shin-ichiro HARA Date: 2002-08-05T19:02:04+09:00 Subject: [ruby-list:35710] Re: scope-in-state [Re: new mathn [Re: Rational#to_int ~ String#center]] 原です。 >けいじゅ@日本ラショナルソフトウェアです. >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