为了从 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)的“官方”文档,或者它只是归结为阅读标题?
为了从 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)的“官方”文档,或者它只是归结为阅读标题?
我不明白问题到底是什么。你喜欢它更短吗?写一个包装器。
rb_object new_big_decimal(char * from) {
rb_funcall(rb_path2class("BigDecimal"), rb_intern("new"), 1, rb_str_new(from, 6));
}
当然它可能不是 rb_object 而是别的东西,但问题是什么?
不幸的是,这个initialize
函数,以及几乎整个BigDecimal
C API,都被声明为静态的,因此没有被公开。
了解 Ruby 的 C 实现及其 API 的最佳方式是浏览源代码,尤其是ext
目录。还有描述通用 API 的README.EXT文件。