【发布时间】:2023-03-12 09:09:01
【问题描述】:
我正在尝试将a native extension of 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 中定义默认参数值?
【问题讨论】: