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 回答