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