Reputation: 21304
I'm a JavaScript developer who's learning Lua. I'm stuck with a problem of getting a function's arity in the Lua language.
In JavaScript, it's simple:
function test (a, b) {}
console.log(test.length) // 2
How is it possible to do it this easily in Lua?
function test (a, b) end
print(#test) -- gives an error..
Upvotes: 9
Views: 642
Reputation: 8000
This is possible only through the debug
library, but it is possible.
print(debug.getinfo(test, 'u').nparams) -- number of args
print(debug.getinfo(test, 'u').isvararg) -- can take variable number of args?
Please see here and here for more information.
Edit: Just in case you wanted to play with some black magic...
debug.setmetatable(function() end, {
__len = function(self)
-- TODO: handle isvararg in some way
return debug.getinfo(self, 'u').nparams
end
})
This will make it possible to use the #
length operator on functions and provide a JavaScript-esque feel. Note however that this will likely only work in Lua 5.2 and above.
Upvotes: 9