Kosmetika
Kosmetika

Reputation: 21304

Get arity of a function

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

Answers (1)

Ryan Stein
Ryan Stein

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

Related Questions