得到一个功能的arity

Kos*_*ika 9 javascript lua arguments function arity

我是一名正在学习Lua的JavaScript开发人员.我遇到了在Lua语言中获得函数arity的问题.

在JavaScript中,它很简单:

function test (a, b) {}
console.log(test.length) // 2
Run Code Online (Sandbox Code Playgroud)

如何在Lua中轻松完成这项工作?

function test (a, b) end
print(#test) -- gives an error..
Run Code Online (Sandbox Code Playgroud)

Rya*_*ein 7

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

print(debug.getinfo(test, 'u').nparams) -- number of args
print(debug.getinfo(test, 'u').isvararg) -- can take variable number of args?
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此处此处.


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

debug.setmetatable(function() end, {
    __len = function(self)
        -- TODO: handle isvararg in some way
        return debug.getinfo(self, 'u').nparams
    end
})
Run Code Online (Sandbox Code Playgroud)

这样就可以#在函数上使用length运算符,并提供JavaScript风格.但请注意,这可能仅适用于Lua 5.2及更高版本.