Data_Wrap_Struct 和 TypedData_Wrap_Struct 的区别?

Difference between Data_Wrap_Struct and TypedData_Wrap_Struct?

我在 Ruby C 扩展中包装了一个 C 结构,但我在文档中找不到 Data_Wrap_Struct 和 TypedData_Wrap_Struct 之间的区别,它们之间有什么区别这两个函数?

official documentation 中描述得很好。

tl;dr 是 Data_Wrap_Struct 已弃用,只允许您为包装数据设置 class 和 mark/free 函数。 TypedData_Wrap_Struct 让您设置 class 然后获取一个指向 rb_data_type_struct 结构的指针,该结构允许为包装设置更高级的选项:

  • mark/free 的功能和以前一样,而且
  • 用于识别包装类型的内部标签
  • 计算内存消耗的函数
  • 任意数据(基本上让您在 class 级别包装数据)
  • 垃圾收集优化的附加标志

查看我的 unofficial documentation 以了解如何使用它的几个示例。