Module::instance_methodでレシーバと関連付いてないメソッド(UnboundMethod)が生成される。元に戻したい場合は、そのメソッドが定義されているクラスその物に対してもう一度bindしてあげる必要がある。しかーし、Object.methodで取得してbind→ダメ、method.inspectからクラス名を取り出してModule.const_getで取得してみる→ダメ。以下メモ。
eval.c:umethod_bind if (FL_TEST(data->rklass, FL_SINGLETON)) { rb_raise(rb_eTypeError, "singleton method bound for a different object"); } ruby.h #define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x)) #define FL_ABLE(x) (!SPECIAL_CONST_P(x)) #define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0) #define FL_SINGLETON FL_USER0 struct RBasic { unsigned long flags; VALUE klass; }; FL_SET(klass, FLAG)でセットする FL_SINGLETONがセットされているのはclass.cの VALUE rb_singleton_class_clone(obj)とVALUE rb_make_metaclass(obj,super)
method_missingで頑張るという手もなくもないが、それをRuby(ruby_1_8)が受け付けるか微妙だ。
超汗だく。いやー、面白かった。Rはいいよね。あとカーブボックスで色々。やっぱトゥルースピントップソウルとかBS270フィッシュブレインぐらいはできるべきだよね。あー練習しなきゃな。
ぶっ飛びたいつもりはあるんだけど、怖いんだよねー。
消防団で3人だけで飲みに行って超面白かった。しかも激安。
追記:のぼるパーク(正式名称は知らない)というのは紫波にある個人所有の屋内パーク。行ったときにあったものは、2mくらい?のクォーターパイプ(バーチカルなし)x1、クオーターパイプの片側に繋がったランプx1と対面にバンクx2、漕いで遊ぶミニランプが対になったやつx1、ローレールx1(半壊)、30〜60cmくらいのカーブボックスx4、ランチャーx1。ランチャーとカーブボックスは好きに動かせる(重いけど)。一応有料。たしか、年会費一万円で1回2時間400円か、年会費3000円で1回2時間800円か、あと子供価格と女性価格があるらしい。インラインスケーター的には天井の鉄骨がちょい危ない気がするけど、屋根があるっていいやね素晴らしい。
あとあれ。飲み会は自腹ですた(と言いつつ班長のオゴリだけど)。