しぶかわです。

SDLのラッパーの拡張ライブラリを実験中なんですが、以下のようなエラーになり実行が
止まってしまいます。開発・実行環境はBeOS R5 Personalです。

test.rb:12:in `put': wrong argument type GX::Screen (expected Data) (TypeError)
	from test.rb:12

メソッドのC言語の宣言部は

rb_define_method(cScreen,"put", Screen_put, 2);

で、テスト用のスクリプトは

g = Screen.new
b = Bitmap.new("test.bmp")

g.put( [300, 200], b)

となっています。

コンパイルは問題なく通っているし、新しいウインドウが一瞬表示されるので、初期化な
どには成功しています。そこらへんはmethodsメソッドを使って確認もしてます。

で、何が分からないのかというと、Rubyの変数には型がないはずなのに、wrong argument
typeというエラーメッセージが出る原因と意味です。Rubyインタプリタのソースも少し読
んでみましたが、メソッドコール処理部分が見つからず、分かりませんでした。

もう一つ、
RubyのクラスをC言語から作るときのことですが、スタートアップコードの流儀ってあり
ますか?というのは、new、initializeどちらでやるべきか(まだinitializeしか試して
ません)、特異メソッドにするか、ふつうのメソッドにするか(Rubyのソースでは両方あ
った気がする)。なにか指針があれば教えてください。

以上2点ですが、ご教授ください。お願いします。

----

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