なかだです。

At Sat, 21 Oct 2000 04:49:15 +0900,
Toyofuku <toyofuku / juice.or.jp> 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はできる。
    中田 伸悦