简单的情况,例如 printf(str, [arg1, arg2, ...])
我将如何使用 FFI 编写一个 ruby 'attach_function' 调用来利用这样的函数?
我很惊讶我无法通过谷歌搜索找到这个问题的答案,但也许我使用了错误的术语。
——更新——也许我不够清楚。我已经在编写一个与 C 库接口的 RubyGem。它的工作已经很好了。我正在使用 FFI,并且一直运行良好,直到我使用可变参数列表点击此函数。
在 ruby 中使用 C 函数的规范方法是通过为其创建 gem 来扩展 ruby。没有像 Haskell 那样直接的方法。
但是,为 ruby 编写 C gem 是一项相当容易的任务,几乎与在 Haskell 中使用 FFI 一样容易。你可以从 ruby pickaxe 看到这个免费的章节,它教如何创建一个简单的 C gem,应该足以开始了。
编辑
如果您的问题与 varargs 和 ffi 相关,假设您使用的是ffi gem
,您可以查看文档中的示例,此示例显示了如何执行此操作:
require 'ffi'
module Hello
extend FFI::Library
attach_function 'printf', [:string, :varargs], :int
end
3.times { Hello.printf("cputs %s %d %x", :string, "yoyo", :int, 33, :int, 34)} # each one needs its own specifier of which type it is
如果您尝试此操作但没有成功,请让我们查看您的代码并告诉我们出了什么问题