Could somebody explain to me why table.unpack()
returns the first table element only when it is used in a function call with additional parameters after table.unpack()
?
Here is some demo code:
local a = {1,2,3,4,5}
print("Test", table.unpack(a)) -- prints "Test 1 2 3 4 5"
print(table.unpack(a), "Test") -- prints "1 Test"
I don't understand why the second line just prints 1 Test
. I'd expect it to print 1 2 3 4 5 Test
. Can somebody explain this behaviour? I'd also be interested in how I can make the second call to print 1 2 3 4 5 Test
.
table.unpack
returns multiple values. The defined behavior in that case is that if it is not the last one in a list of expressions then all but the first returned value will be discarded.
From the book:
Lua always adjusts the number of results from a function to the circumstances of the call. When we call a function as a statement, Lua discards all of its results. When we use a call as an expression, Lua keeps only the first result. We get all results only when the call is the last (or the only) expression in a list of expressions.
As a workaround you can append the rest of the arguments to the table and make the table the last argument that way.