From: Shugo Maeda Date: 2012-11-12T22:21:46+09:00 Subject: [ruby-dev:46501] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): 前田です。 2012年11月12日 19:20 SASADA Koichi : > のとき,たしか C のメソッドテーブルを null にしておいて云々,と聞いたと > 思うんですが,ここでもう,refinement check only なメソッドエントリを置く > ようにするとどうですかね. ああ、そこにメソッドエントリを置いていいなら、その方がいいかもしれないですね。 どうでしょうか? > なかださん ただ、 class C end module R refine C do def foo; end end end class C prepend M end みたいなケースだと、Cにrefinedメソッドがすでに追加された後でprepend されて、Cのすべてのメソッドがiclass(C')に移動されるので、その時には やはりCにrefinedメソッドエントリだけ(メソッド本体はC'だけが持つ)を 追加しておかないといけなさそうですね。 > # いや,なんかそもそも refinement と prepend を混ぜるってのは, > # 色々と基本設計間違ってるというか,後付け感がひどい感じがする. > # 出来るけどやっちゃいけない感じ. Railsのフレームワーク側のコードで今後monkey patchingがprependに 置き換えられる予定なので、ユーザがさらにrefineで拡張するようなケース はひょっとしたら出てくるかもしれません。 さすがにrefineした後でprependするようなケースはあまりないと思うの ですが。 -- Shugo Maeda