0

目前,我有一个 RUby FFI 结构:

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

4

1 回答 1

0

FFI::Structhttps://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
于 2019-07-11T23:10:37.353 回答