Ruby FFI如何定义默认参数

时间:2012-09-29 02:26:03

标签: ruby ffi

我正在尝试将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中定义默认参数值的函数?

1 个答案:

答案 0 :(得分:0)

答案是 。我认为你误解了FFI的观点,或者我误解了你的帖子。如果要将原生扩展移植到FFI,这应该意味着您要删除代码库中的所有C代码并将其转换为Ruby。您应该将旧C方法rinku_autolink()rb_rinku_autolink()的功能转换为Ruby,可能是单个Ruby方法。然后,如果该Ruby方法需要调用某些C函数,您将使用FFI的attach_function方法来访问这些函数。

如果那不是你在做什么,你能解释一下你的实际目标是什么以及为什么?