[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Odd behaviour with multiple return values and varargs
- From: David Jones <drj@...>
- Date: Fri, 14 Sep 2007 00:44:35 +0100
On 13 Sep 2007, at 23:33, Adrien de Croy wrote:
I wonder if there's some reason no other language (that I know of
anyway) allows more than one return value for a function.
Maybe because it's not such a great idea to have a non-
deterministic number of return values?
Also, surely if Lua is going to validate the number of input
parameters to a function, it should validate the number of return
Lua doesn't validate the number of input parameters to a function.
In fact Lua, _unlike_ most other languages, acts very symmetrically
with regard to calling and returning. After all, returning is just
calling the continuation, so the two cases _should_ be treated the same.
In Lua any number of arguments can be passed to any function
regardless of how many it expects. Excess arguments are discarded, a
shortfall is made up with nils. There is a mechanism for arbitrary
numbers of arguments.
Any number of results can be returned from a function, regardless of
how many are required. Excess results are discarded, a shortfall is
made up with nils. There is a mechanism for arbitrary numbers of
I'm not dead against more than one return value, but I think it's a
terrible idea to have a variable number of return values (esp
dependent on input). How on earth can a caller know how many
return values there actually were?
If a function wants to return lots of values, it should return a
table (which at least then can be iterated). At least then the
stack doesn't grow (or does lua clean up unused return values?).
for i in 1, 1000000 do
c = funcreturning2values()
unless lua pops unused return values off the stack, you'll have a
stack size of 10000000 items by the end of this.
This is pure speculation. You haven't looked at the implementation.
It doesn't do that. That would be silly.