Lua C API如何确定将函数称为类成员还是仅从表中调用函数?

Xorza

我有使用Lua C API的C ++应用程序。我通过lua api声明了全局表:

lua_newtable(L);

lua_pushstring(L, "someLuaFunc");
lua_pushcfunction(L, &someCFunc);
lua_settable(L, -3);

lua_setglobal(L, "table1");

现在我可以使用'。来调用someLuaFunc 或者 ':'

table1.someLuaFunc()
table1:someLuaFunc()

两种情况都将运行someCFunc。

问题是:在someCFunc内部,是否有任何方法可以确定其调用方式(通过:或。)?

在我的情况下,检查参数数量和类型不是选项。

奥列格·沃尔科夫(Oleg V.Volkov)

不,你不能。

object:method()

直接翻译成

main <123.lua:0,0> (4 instructions, 16 bytes at 00020510)
0+ params, 2 slots, 0 upvalues, 0 locals, 2 constants, 0 functions
        1       [1]     GETGLOBAL       0 -1    ; object
        2       [1]     SELF            0 0 -2  ; "method"
        3       [1]     CALL            0 2 1

也就是说,SELF操作码在寄存器的调用对象附近排列函数,然后CALL操作码执行常规调用。

Lua在这种情况下的范例是鸭子打字。没有唯一的类型,只是表(或userinfo),因此只要检查您的参数是否具有要处理/调用的必要数据/方法,否则就拒绝。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章