Определить метод инициализации для Ruby FFI :: Struct? - PullRequest
0 голосов
/ 12 июля 2019

В настоящее время у меня есть RUby FFI Struct:

class Color < FFI::Struct
  layout :red, :uchar, :green, :uchar, :blue, :uchar
end

, который необходимо создать, как т его:

color = Color.new
color[:red] = 255
color[:green] = 0
color[:blue] = 0

Можно ли определить метод initialize в Structтак что я могу просто сделать это:

color = Color.new(255, 0, 0)

Я попробовал следующее, которое работает, но собирается ли это как-то укусить меня в будущем?

class Color < FFI::Struct
layout, :red, :uchar, :green, :uchar, :blue, :uchar
  def initialize(red, green, blue)
    self[:red] = red
    self[:green] = green
    self[:blue] = blue
  end
end

1 Ответ

0 голосов
/ 12 июля 2019

Источник для FFI::Struct (https://github.com/ffi/ffi/blob/master/lib/ffi/struct.rb) не определяет метод initialize, поэтому вы ничего не переопределяете. Это означает, что то, что вы делаете , должно быть хорошо.

Если вы хотите быть более безопасным, вы всегда можете определить новый метод класса для Color:

class Color < FFI::Struct
  layout :red, :uchar, :green, :uchar, :blue, :uchar
  def self.from_rgb(red, green, blue)
    color = new
    color[:red] = red
    color[:green] = green
    color[:blue] = blue
    color
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...