From: arton Date: 2010-09-18T14:33:31+09:00 Subject: [ruby-list:47444] Re: <=>の意味は? artonです。 ここがおもしろかったので反応します。 > 実はこのあたりが、ネックになっておりまして・・・ > データ構造が関数(メソッドですか?)へのポインタを持てれば、わざわざ > OOPする必要あるのかなぁ〜?とかついつい思ってしまうのが素人考えだったり > するような気がします。私見ですが・・・ FILE* fp = fopen(...) fprintf(fp, ....); fclose(fp); というように、グローバルな関数に操作対象を引数として与えるのか、それとも FILE構造体の中に関数ポインタが入っていると仮定して FILE*fp = fopen(...); fp->fprintf(...); fp->fclose(); と書くかの違いと理解すると良いと思います。思いっきりC++みたいですが。 で、これが思いっきりC++(というOOPL)なのですから、その考えはまさにOO (のうちのカプセル化というあたり)です。 で、上のことをするのに、 struct FILE { ... void (*fprintf)(const char* ...); }; としておいて、関数ポインタに構造体(ヘッダファイルにたぶんある)とはファ イル上別の位置(おそらくソースファイル)に定義した関数をfopenの中で押し 込んで、とか面倒なことをするよりも、 struct FILE { void fprintf(...) { ... } }; と定義できるほうが楽です。したがって、上のようなことをやるならCよりC++の ほうが向いていると思います。 ということはわざわざOOPするのではなく、わざわざ面倒な書き方と実装方法を 取らなくても済むようにOOPLがあると考えた方が良いと思います。 で、RubyはC++のようにCに付け加えた言語ではないので、また異なる書き方がで きるようになっているということです。 -- arton -------------------------------------- Get the new Internet Explorer 8 optimized for Yahoo! JAPAN http://pr.mail.yahoo.co.jp/ie8/