我正在尝试将ruby 的原生扩展移植到 FFI。暴露的 ruby 接口是
auto_link(text, mode=:all, link_attr=nil, skip_tags=nil, flags=0) { |link_text| ... }
并且该块是可选的。
原始c实现中有两个函数:
int rinku_autolink(
struct buf *ob,
const uint8_t *text,
size_t size,
autolink_mode mode,
unsigned int flags,
const char *link_attr,
const char **skip_tags,
void (*link_text_cb)(struct buf *ob, const struct buf *link, void *payload),
void *payload)
哪个做实际的工作和
static VALUE rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
它处理默认参数和块回调的东西。
我的问题是,如果我想在 FFI 中公开相同的 ruby 接口,应该注册上述哪个函数attach_function
,还是应该为 FFI 定义另一个 c 函数?以及选择如何定义默认参数值的函数attach_function
?