Javascript 求函数的算术数

Javascript 求函数的算术数,javascript,function,lua,arguments,arity,Javascript,Function,Lua,Arguments,Arity,我是一名JavaScript开发人员,正在学习Lua。我遇到了一个在Lua语言中获取函数算术的问题 在JavaScript中,它很简单: 功能测试(a,b){ console.log(test.length)//2 在Lua中如何轻松做到这一点 功能测试(a、b)结束 打印(#测试)--给出一个错误。。 这只能通过debug库实现,但这是可能的 print(debug.getinfo(test, 'u').nparams) -- number of args print(debug.getin

我是一名JavaScript开发人员,正在学习Lua。我遇到了一个在Lua语言中获取函数算术的问题

在JavaScript中,它很简单:

功能测试(a,b){
console.log(test.length)//2
在Lua中如何轻松做到这一点

功能测试(a、b)结束
打印(#测试)--给出一个错误。。

这只能通过
debug
库实现,但这是可能的

print(debug.getinfo(test, 'u').nparams) -- number of args
print(debug.getinfo(test, 'u').isvararg) -- can take variable number of args?
有关更多信息,请参阅和


编辑:以防万一你想玩一些黑魔法


这将使在函数上使用
#
长度操作符成为可能,并提供JavaScript风格的感觉。但是请注意,这可能只适用于Lua5.2及更高版本。

@Kosmetika我用了一个你可能喜欢的技巧编辑了我的答案。让我知道它是如何为您工作的。我正在使用lua 5.1,但我会尝试以下两个特别注意事项:1)您可以将函数作为方法调用,这会在参数数量上增加1(self参数),2)最后一个格式参数可能是
,这是一个参数数量不确定的列表。为了避免XY问题,您能否提供一些您试图解决的问题的上下文?
debug.setmetatable(function() end, {
    __len = function(self)
        -- TODO: handle isvararg in some way
        return debug.getinfo(self, 'u').nparams
    end
})