Использование Ruby BigDecimal в C API - PullRequest
4 голосов
/ 31 марта 2012

Чтобы создать BigDecimal из строки C в расширении Ruby, я делаю это:

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 ]

2 голосов
/ 31 марта 2012

Я не понимаю, в чем проблема на самом деле.Вам нравится короче?Напишите обертку.

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

Конечно, это может быть не rb_object, а что-то еще, но в чем проблема?

1 голос
/ 31 марта 2012

К сожалению, функция initialize и почти весь API-интерфейс BigDecimal C объявлены как статические и поэтому не отображаются.

Лучший способ узнать о реализации Ruby на C и его API - это просмотреть источник , особенно каталог ext . Также имеется файл README.EXT , в котором описывается общий API.

...