我有使用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内部,是否有任何方法可以确定其调用方式(通过:或。)?
在我的情况下,检查参数数量和类型不是选项。
不,你不能。
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] 删除。
我来说两句