教程部分中的一个示例:“为 C 类型定义元方法”如下所示:
local ffi = require("ffi")
ffi.cdef[[
typedef struct { double x, y; } point_t;
]]
local point
local mt = {
__add = function(a, b) return point(a.x+b.x, a.y+b.y) end,
__len = function(a) return math.sqrt(a.x*a.x + a.y*a.y) end,
__index = {
area = function(a) return a.x*a.x + a.y*a.y end,
},
}
point = ffi.metatype("point_t", mt)
local a = point(3, 4)
我对“构造函数”在哪里有点困惑,我假设默认情况下point(3,4)
是隐式路由3 -> x
和5 -> y
. 当我想将一些逻辑挂在构造函数上时怎么办?换一种说法..如何指定非默认构造函数?
我将一堆 c 库包装到面向对象的 lua 代码中,我不关心规范 lua 的可移植性。具体来说,我需要挂钩面向对象编程的三个核心功能,用于对象生命周期管理,, create
, . 我知道销毁将是我的类型的方法。所以我需要知道如何做and ,并希望避免由 luajit 完成的默认初始化。init
destroy
__gc
metatable
create
init
编辑
ffi.new
和其他人有一堆规则来管理类型的创建(记录在 luajit 的 ffi 语义页面中)。它在语义部分。我仍然想知道将自定义创建者和初始化程序(作为 ac 库的一部分)挂到 ffi 对象创建中的最干净的方法是什么。