しぶかわです。

> |ext/dbm.hを真似て
> |       rb_define_method(cSurface,"initialize", Surface_init,0);
> |
> |       rb_define_singleton_method(cSurface,"new", Surface_init,0);
> |にしたらwrong argument typeは出なくなりました。画面の初期化、ビットマップの表示
> |まで行けました。
> 
> あー、そうか。newはオブジェクトの割り当てをinitializeはオブ
> ジェクトの初期化を行います。やることが違うのでそのまま置き換
> えちゃダメです。

ext/dbm.cのfdbm_s_open()と同様に、与えられたレシーバを元に、Data_Wrap_Struct()で
オブジェクトを作り、それを返している仕様になっていたので、あまり問題はないと思い
ます。

Data_Wrap_Struct()及び、Data_Make_Struct()は、newメソッドで使い、それらの関数
(マクロ?)の返り値をそのままnewメソッドの返り値にすべし、と理解しましたが、そ
れでいいでしょうか?

> |まつもとさんがこう言われるには何か理由があると思いますがどのような理由からなんで
> |すか?よろしければ教えてください。Rubyが動的オブジェクト指向スクリプト言語だか
> |ら、間接的に答えなのではないかと推測できますが、具体的に何故かは分かりません。
> 
> newを置き換えると後で継承が使いにくいからです。

なんとなく見えてきました。C++のnew演算子を普通は自作しないのと同様ですね。

現在作成中の拡張ライブラリは画面にビットマップを表示、キー入力、マウス入力が出来
るところまで完成しました。あとWAVファイルの再生、ドキュメント整備、サンプルゲー
ムのコーディングが完了したら公開してみたいと思います。Ruby上でのネイティブスレッ
ドサポートはいろいろ考えてみたのですが、難しそうなのでとりあえず保留。

----

    東京工業大学 電気電子工学科 2年
_/_/_/  しぶかわよしき    JA6HFA/1
_/      mailto: shibu / JA1YAX.gr.jp