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