在C API中使用ruby的BigDecimal

时间:2012-03-31 04:50:44

标签: c ruby bigdecimal ruby-c-extension

为了从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),还是只是阅读标题?

2 个答案:

答案 0 :(得分:2)

我不明白问题到底是什么。你喜欢它更短吗?写一个包装器。

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

当然它可能不是rb_object而是其他东西,但问题是什么?

答案 1 :(得分:1)

不幸的是,the initialize function以及几乎整个BigDecimal C API被声明为静态,因此不会公开。

了解Ruby及其API的C实现的最佳方法是浏览the source,尤其是ext directory。还有README.EXT文件,它描述了一般API。