Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle variable number of arguments

Tags:

lua

I've understood that arg is deprecated and is no longer supported in later versions of Lua. I have a lot of functions written in Lua 5.1 that have variable number of arguments and I am moving to Lua 5.4 but I have no idea how to handle them without arg.

-- Without arg, nil entries are ignored.
local function printMyArgumentsA( ... )
    local t = {...}
    for i, v in pairs( t ) do
        print( i, v )
    end
    print("")
end
printMyArgumentsA( 1, nil, 3, nil )


-- With arg, I know how many entries there were, so I know which are nil.
local function printMyArgumentsB( ... )
    for i = 1, arg.n do
        print( i, arg[i] )
    end
    print("")
end
printMyArgumentsB( 1, nil, 3, nil )

How would I get the number of arguments sent to a function without the use of arg in later versions of Lua?


1 Answers

Use table.pack. It stores an n field, just like in the old code.

local function printMyArgumentsB( ... )
    local arg <const> = table.pack(...)
    for i = 1, arg.n do
        print( i, arg[i] )
    end
    print()
end
printMyArgumentsB( 1, nil, 3, nil )

If you don't want to make a table, you could use select('#', ...) to get the number of values in .... See select here.

like image 54
luther Avatar answered Jan 23 '26 19:01

luther



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!