获取函数的arity

Get arity of a function

本文关键字:arity 函数 获取      更新时间:2023-10-09

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

在JavaScript中,它很简单:

function test (a, b) {}
console.log(test.length) // 2

在卢阿怎么可能这么容易做到这一点?

function test (a, b) end
print(#test) -- gives an error..

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

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

请参阅此处和此处了解更多信息。


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

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

这将使在函数上使用#长度运算符成为可能,并提供JavaScript风格的感觉。然而,请注意,这可能只适用于Lua 5.2及以上版本。