Вопрос

Я использую действительно потрясающий рубиновый ффи библиотека для доступа к функциям библиотеки C в Ruby.

Есть ли способ перебрать макет 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
Это было полезно?

Решение

Смотря на источник для struct.rb, я обнаружил, что ты можешь позвонить Struct::members чтобы получить массив символов, которые вы определили как «ключи».

Отсюда у вас также есть Struct::values ценностям каждого участника, Struct::offsets для смещений каждого члена и нескольких других методов.

Другие советы

Конечно, это немного дороже, чем перебирать элементы структуры, но вы также можете преобразовать ее в хэш с помощью 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}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top