util.table.pack

Shared

Packs values into a table with size information


Syntax

local result = util.table.pack(
    ...
)

Parameters

TypeNameDescription
any...Values to pack into a table

Returns

TypeNameDescription
tableresultTable containing all values with field n set to the number of arguments

Examples

Pack multiple values into a table
local t = util.table.pack(1, 2, 3, 4, 5)

core.engine.print("info", t[1], t[2], t[3]) -- 1  2  3
core.engine.print("info", t.n) -- 5
Pack values including nils and check count
local t = util.table.pack("a", nil, "b", nil, "c")

core.engine.print("info", t[1], t[2], t[3]) -- 'a'  nil  'b'
core.engine.print("info", t.n) -- 5
Pack multiple return values from a function
local function multiReturn()
    return 10, 20, 30
end
local t = util.table.pack(multiReturn())

core.engine.print("info", t[1], t[2], t[3]) -- 10  20  30
core.engine.print("info", t.n) -- 3
Pack strings and iterate using n field
local t = util.table.pack("hello", "world", "lua")

for i = 1, t.n do
    core.engine.print("info", t[i])
end

--[[
Output: 
'hello'
'world'
'lua'
]]
Pack with no arguments returns n of 0
local t = util.table.pack()

core.engine.print("info", t.n) -- 0
Pack a single value
local t = util.table.pack(42)

core.engine.print("info", t[1]) -- 42
core.engine.print("info", t.n) -- 1
Pack mixed types into a table
local t = util.table.pack(1, "two", true, nil, {5})

core.engine.print("info", t.n) -- 5
core.engine.print("info", type(t[5])) -- 'table'
n field is more reliable than # with nils
local t = util.table.pack(1, 2, nil, 4)

core.engine.print("info", #t) -- 4 (might be 2 depending on implementation)
core.engine.print("info", t.n) -- 4 (always correct)
Preserve trailing nils with n field
local t = util.table.pack(1, 2, 3, nil, nil)

core.engine.print("info", t.n) -- 5
core.engine.print("info", t[5]) -- nil
Iterate safely using n field
local t = util.table.pack("a", nil, "b", nil)

for i = 1, t.n do
    core.engine.print("info", i, t[i])
end

--[[
Output: 
'a'
nil
'b'
nil
]]

On this page