From: nobu.nakada@... Date: 2000-10-23T20:20:19+09:00 Subject: [ruby-list:25583] Re: Ruby/Jed なかだです。 At Sat, 21 Oct 2000 04:49:15 +0900, Toyofuku wrote: > >> ところでこのような話題は ruby-dev向きでしょうか。 > > そうかもしれませんが、どっちかというと ruby-ext かも。好きなほうにもっ > > てってください。 > > ruby-ext を subscribe しましたので改めて続きは ruby-ext > でやろうと思います。 ということで ruby-ext へ。 > 現在の Ruby/Jed の報告。 > > よくわからないまま > | (rbuffer.c から抜粋) > | obj = rb_obj_alloc(class); > | data = Data_Wrap_Struct(class, buffer_mark, 0, buf); > | rb_ivar_set(obj, id_data, data); > | buf->obj = obj; > | rb_funcall(buf->obj, id_init, 1, name); > の > | rb_funcall(buf->obj, id_init, 1, name); > を外したらここは通るようになったので先に進みました。 > (後で問題がでてくるのかもしれませんが) このクラスのサブクラスを作ったときに initialize が呼ばれない というのはありますね。 Foo < Object というクラスがあったとき、Foo.new(...) という Ruby のコードは次のような流れになります。 Foo.new -> Object.new -> Foo#initialize -> Object#initialize # Object.new は C レベルでは必須ではありませんが。 ここで、Foo.new から Foo#initialize には引数として name を渡 していますが、実際には Foo#initialize は定義されていないので、 継承した Object#initialize が呼ばれます。そして 1.6 からは Object#initialize が引数を取らなくなったためにエラーになります。 つまり、Foo.new と Object#initialize との間の不一致が問題なの で、Foo.initialize(name) を定義するか、Object#initialize に合わ せて Foo.new では引数を渡さないようするか、どちらかにすればいい わけです。 > ・Windows では ENV[HOME] が nil のことがある。 これは Unix でも可能性はあります。env -u HOME printenv HOME とか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦