当前,我有一个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
我可以在Struct上定义一个initialize
方法,这样我就可以做到这一点:
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
答案 0 :(得分:0)
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