Lua C API从表创建表

时间:2011-10-19 21:25:27

标签: c lua

目前我在lua中有一些东西就像使用表格的OOP一样。

TCharacterController = {}
TCharacterController.speed = 10.0
TCharacterController.axis = "x"

function TCharacterController:new(o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

function TCharacterController:update()
    --this is a function that is called by the C application
end

概念是我将创建一个子对象

ScriptObj = TCharacterController:new()

为我的应用程序中的一个对象附加的每个脚本实例(这是一个游戏)。所以我有一个实体层,所有实体都可以附加ScriptObj。我的想法是脚本实际上是一个类,它也是为它所连接的每个实体实例化的。

我的问题是,如何使用C API实例化TCharacterController的实例?

1 个答案:

答案 0 :(得分:3)

由于new使用自引用语法糖,你需要将self作为第一个arg传递,其余的只是表查找的函数调用:

lua_getglobal(L, "TCharacterController"); /* get the table */
lua_getfield(L, -1, "new");  /* get the function from the table */
lua_insert(L, -2); /* move new up a position so self is the first arg */
lua_pcall(L, 1, 1); /* call it, the returned table is left on the stack */