使用 (Objective-)C 桥接,在使用参数时获取调用者的实例 Lua

我正在尝试在Lua和我的"本地"代码之间创建一个简单的桥梁。使用以下代码,我添加了一个LuaObject类,以便可以从Lua代码中使用它。

现在,当从Lua调用proxyLuaObjectCall时,我想能够检索调用方法的LuaObject实例。在没有任何参数调用方法时,上面的代码可以完美工作。但是当调用具有任何参数的方法时,代码将出错,错误信息为:

bad argument #0 to '' (LuaObject expected, got table).

例如,在lua中使用以下代码:

这正常工作:

myObject = getObjectWithName("nominator");
myObject.talk();

这个失败了

myObject = getObjectWithName("nominator");
myObject.say("And the winner is");

// Result: bad argument #0 to 'say' (LuaObject expected, got table).

--

myObject = getObjectWithName("nominator");
myObject.say("And the winner is", "Joan");

// Result: bad argument #0 to 'say' (LuaObject expected, got string).

我尝试更改调用具有参数的方法时的索引,但是堆栈上没有任何东西包含对LuaObject实例的引用。

我在这里做错了什么?我应该怎么做才能检索调用方法的LuaObject实例?

点赞
用户1442917
用户1442917

一切看起来都很好,但你最好使用方法符号进行调用:

myObject = getObjectWithName("nominator");
myObject:say("And the winner is");

myObject:say("")myObject.say(myObject, "") 相同,这是你的 API 需要的。

另一方面,@siffiejoe 可能是正确的根据这个 PiL 的例子,它可能应该是 luaL_checkudata(luaState, 1, "LuaObject")。事实上,你可能需要这两个更改来使它工作。

2014-07-13 18:14:00