我是一名正在学习 Lua 的 JavaScript 开发人员。我遇到了在 Lua 语言中获取函数数量的问题。
在 JavaScript 中,这很简单:
function test (a, b) {}
console.log(test.length) // 2
怎么可能在 Lua 中轻松做到这一点?
function test (a, b) end
print(#test) -- gives an error..
我是一名正在学习 Lua 的 JavaScript 开发人员。我遇到了在 Lua 语言中获取函数数量的问题。
在 JavaScript 中,这很简单:
function test (a, b) {}
console.log(test.length) // 2
怎么可能在 Lua 中轻松做到这一点?
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 及更高版本。