获取函数的元数(arity)。

我是一名学习 Lua 的 JavaScript 开发者。我遇到了一个获取 Lua 语言函数功能函数的问题。

在 JavaScript 中,这很简单:

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

如何在 Lua 中轻松地实现这一点呢?

function test (a, b) end
print(#test) -- gives an error..
点赞
用户828255
用户828255

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

print(debug.getinfo(test, 'u').nparams) -- 参数个数
print(debug.getinfo(test, 'u').isvararg) -- 是否可以接受可变数量的参数?

更多信息请查看这里这里


编辑: 如果你想玩一些黑魔法……

debug.setmetatable(function() end, {
    __len = function(self)
        -- TODO: 处理 isvararg
        return debug.getinfo(self, 'u').nparams
    end
})

这将使得可以在函数上使用 # 长度操作符,并提供类似 JavaScript 的使用感觉。 注意,这可能仅在 Lua 5.2 及以上版本中有效。

2013-11-24 17:00:25