跳到内容

to_unsafe

如果一个类型定义了 to_unsafe 方法,当将它传递给 C 时,将传递此方法返回的值。例如

lib C
  fun exit(status : Int32) : NoReturn
end

class IntWrapper
  def initialize(@value)
  end

  def to_unsafe
    @value
  end
end

wrapper = IntWrapper.new(1)
C.exit(wrapper) # wrapper.to_unsafe is passed to C function which has type Int32

这对于定义 C 类型包装器非常有用,无需显式地将它们转换为它们的包装值。

例如,String 类实现 to_unsafe 以返回 UInt8*

lib C
  fun printf(format : UInt8*, ...) : Int32
end

a = 1
b = 2
C.printf "%d + %d = %d\n", a, b, a + b