luajit ffi 构造函数参数路由

在教程部分的一个示例:**“为 C 类型定义元方法”**如下所示:

local ffi = require(“ ffi”)
ffi.cdef[[
typedef struct {double x,y;} point_t;
]]

local point
local mt = {
  __add = functionabreturn pointa.x+b.xa.y+b.yend__len = functionareturn math.sqrta.x*a.x+a.y*a.yend__index = {
    area = functionareturn a.x*a.x+a.y*a.y end,
  },
}
point = ffi.metatype(“ point_t”,mtlocal a = point(3,4)

我有点糊涂了,构造函数在哪里,我假设默认情况下point(3,4)会将3 - > x 5 - > y隐式路由。当我想将一些逻辑挂钩到构造函数时怎么办?换句话说... 我如何指定非默认构造函数?

我正在将一堆 c 库包装成面向对象的 lua 代码,并且我不关心可典型 lua 的可移植性。具体而言,我需要连接对象生命周期管理的三个核心函数,createinitdestroy。我知道 destroy 将是我的类型 “metatable”的 __gc 方法。

因此,我需要知道如何执行 createinit,并希望避免 luajit 执行的默认初始化。

编辑

'ffi.new'和其他一些函数有一堆规则来管理类型的创建(记录在 luajit 的 ffi 语义页面上)。它在语义部分中。我仍然想知道将定制的创建者和初始程序(作为 c 库的一部分)挂接到 ffi 对象创建的最干净的方法是什么。

原文链接 https://stackoverflow.com/questions/9382377

点赞
stackoverflow用户282536
stackoverflow用户282536

你需要包装你的 point 调用才能得到你需要的效果:

local function newpoint ( vals )
    -- 在这里处理 vals?
    return point ( vals )
end
newpoint {x=5;y=4}

或者你可以将你的 point 函数作为 create 函数;然后只需一个 init 方法...

mt.__index.init = function ( p , x , y )
     p.x = x;
     p.y = y;
end

local mypoint = point()
mypoint:init ( 1 , 2 )

注意:所有 point 类型的对象已经应用了你的元表,所以你不需要附加方法或其他东西。

对我来说这似乎有点无意义....为什么你要将创建和初始化分开??

2012-02-21 20:48:17