4

Ruby拡張機能のC文字列からBigDecimalを作成するために、私はこれを行っています:

rb_funcall(rb_path2class("BigDecimal"), rb_intern("new"), 1, rb_str_new("0.0777", 6));
// => BigDecimal.new("0.0777")

これを行うためのより短い方法はありますか?

また、ばかげた質問ですが、C API(ruby 1.9.3)の「公式」ドキュメントはありますか、それともヘッダーを読むだけですか?

4

2 に答える 2

2

問題が実際に何であるかわかりません。あなたはそれを短くするのが好きですか?ラッパーを作成します。

rb_object new_big_decimal(char * from) {
       rb_funcall(rb_path2class("BigDecimal"), rb_intern("new"), 1, rb_str_new(from, 6));
 }

もちろん、それはrb_objectではなく何か他のものかもしれませんが、問題は何ですか?

于 2012-03-31T07:09:14.323 に答える
1

残念ながら、関数initializeおよびほとんどすべてのBigDecimalC APIは静的として宣言されているため、公開されていません。

RubyのC実装とそのAPIについて学ぶ最良の方法は、ソース、特にextディレクトリを参照することです。一般的なAPIを説明するREADME.EXTファイルもあります。

于 2012-03-31T11:08:32.673 に答える