ruby-extの皆さん 、こんにちは。
立川と申します。

swigを用いて簡単なC++のライブラリをrubyの拡張ライブラリとして
移植しているところです。
ポインタを用いて関数に引数を渡しているところを、
ruby側スクリプトで処理する仕方がよくわかりません。
エラーになるのは以下に挙げる Nnwork#train(float [], float *desired, float, float)
という関数です。
テスト用スクリプトを実行すると2番目の引数 desired のところで、
test_odd_even.rb:26:in `train': Expected float * (TypeError)
となります。
関数には desired = [0.9] とrubyの配列に小数を入れたもの投げています。
ruby の配列をそのまま関数に投げるのがまずいのかとも思いましたが、
brain.run(test_data_odd_1) ではうまく行きます。

ちなみに swigは Version 1.3.9u-20011116-1805、
ruby は ruby 1.6.5 (2001-09-19) [i586-linux] です。
説明が舌足らずかもしれませんが、なにかヒントやら参考になるサイト
でもありましたら、教えてください。
またswigを用いて拡張ライブラリを作成しているプロジェクトを
教えてくださるだけでも助かります。できれば小さなやつを。

#拡張ライブラリの作り方を解説した256倍本を首を長くして待ち焦がれています。



ファイル nnwork.i の中身(の一部)

%include "typemaps.i"

## 以下3行はよくわからないが、外すと別の箇所でエラーとなる
%typemap(in) float []{
  $target = (float*) RARRAY($source)->ptr; 
}


class Nnwork {
public:
  void train (float [], float *desired, float, float);
  void run (float [], float * OUTPUT);
};


ファイル test.rb の中身(の一部)

test_data_odd_1  = [1.0, 0.0, 0.0, 1.0, 1.0]

desired = [0.9]
brain.train (test_data_even_1, desired, 0.0000000005, 0.2)

brain = Nnwork.new(5, 3, 1)
brain.train (test_data_even_1, desired, 0.0000000005, 0.2)
brain.run(test_data_odd_1)