有没有办法以编程方式确定在C/C++中Lua函数需要多少个参数?

Ash*_*vis 3 c++ lua

有没有办法确定Lua函数在从C/C++代码调用它之前需要多少参数?

我看了看lua_Debuglua_getinfo,但他们似乎并没有提供我所需要的.

看起来有点像我反对Lua的精神,但我真的想要证明我在Lua和C++之间的界面.当从Lua代码调用C++函数时,接口验证Lua提供了正确数量的参数,并且每个参数的类型都是正确的.如果发现参数a lua_error发出问题.

我想反过来检查类似的错误.当C++调用Lua函数时,它至少应该检查Lua函数是否没有声明更多参数.

Aar*_*ela 5

Lua无法满足您的要求.

您可以使用一组参数定义Lua函数,如下所示:

function f(a, b, c)
   body
end
Run Code Online (Sandbox Code Playgroud)

但是,Lua对传递给此函数的参数数量没有限制.

这是有效的:

f(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

额外的参数被忽略.

这也是有效的:

f(1)
Run Code Online (Sandbox Code Playgroud)

其余参数分配为'nil'.

最后,您可以定义一个带有可变数量参数的函数:

function f(a, ...)
Run Code Online (Sandbox Code Playgroud)

此时,您可以将任意数量的参数传递给函数.

请参阅Lua参考手册的 2.5.9节.

您可以在这里做的最好的事情是为Lua函数添加检查以验证您是否收到了您期望的参数.


Mic*_*man 5

在 Lua 5.2 中,您可以通过get_info()'u'使用类型填充字段来确定参数的数量、上值以及函数是否接受可变数量的参数。Lua 5.1 中不提供此功能。nups, nparams, isvararg