迭代Ruby FFI Struct布局

时间:2010-03-19 15:02:54

标签: ruby rubygems ffi

我正在使用非常棒的ruby ffi库来访问ruby中c库中的函数。

有没有办法迭代Ruby FFI :: Struct的布局?

示例FFI :: Struct:

class Example < FFI::Struct
  layout :name, string,
         :desc, :string,
         :type, :int,
         :value, :string
end

这似乎不起作用,但类似下面的伪代码:

example_struct.each_key do |key|
  puts key
end

2 个答案:

答案 0 :(得分:3)

查看the source for struct.rb,我发现您可以致电Struct::members以获取您定义为“密钥”的符号数组。

从那里开始,每个成员的值都有Struct::values,每个成员的偏移量为Struct::offsets,还有一些其他方法。

答案 1 :(得分:0)

肯定比迭代Struct的成员要贵一些,但您也可以将其转换为to_h的哈希值。

Foo = Struct.new(:a, :b, :c)
=> Foo
baz = Foo.new(1,2,3)
=> #<struct Foo a=1, b=2, c=3>
baz.to_h
=> {:a=>1, :b=>2, :c=>3}