まつもと@ぴーえふゆーです。 matz / caelum.co.jp (Yukihiro Matsumoto) said: > |あの、別スレッドで質問するべきなのかもしれないですが、 > |もうひとつ聞いていいですか? > > どうぞ,どうぞ. どうもありがとございます(_ _) > まず,Kernelからしか継承していないクラスはnilだけなんですが, > これは大した理由ではないです.nilは機能が少なくて別にObject > である必要がないからです. 「Kernel」から継承していないじゃなくて、「Object」から継承して いない、ですよね。 > 実はですね.主な理由は関数メソッドとの絡みなんです. > > つまり,全ての関数的メソッド(openとか)はKernelのprivate > methodとして定義してあります.そしてユーザがトップレベルでメ > ソッドを定義するとObejctクラスにメソッドを定義します. > > つまり,Kernelがなく関数メソッドをObjectのメソッドとすると, > ユーザが同名のメソッドを定義すると「置き換えて」しまいますが, > Kernelがあるので,「再定義」できます.つまり super で呼べる > わけですね. つまり、rubyをオブジェクト指向的にではなくて、手続き型言語として 使用することも出来るようにするために、ということですよね。もし仮 に、KernelをObjectのサブクラスとして ○ Object | → ● Kernel open() fork() exec() …… こんな風に定義しちゃって、Kernelのメソッドをクラスメソッドにして しまったとしたら、Kernel.open()とかって呼び出さなきゃいけなくて 手続き型言語っぽくなくなっちゃうからと。 ふむふむ。rubyが純粋なOOPLでもあり、かつ、おきらく極楽なscript としても使える様にするためってことなんでしょうかねぇ。 なんとなくわかったような気になりました。ありがとうございました。 -- Eiji MATSUmoto <ematsu / pfu.co.jp> PFU Limited, Ishikawa Japan. < Call me 'USAGI' please. (^^) >