• Subject: Multiple values. Was: Re: 5.1
• From: Rici Lake <lua@...>
• Date: Tue, 18 Oct 2005 11:18:07 -0500

```
On 18-Oct-05, at 1:24 AM, Glenn Maynard wrote:

```
The problem is that design of the language, in this area, is unintuitive and unnatural to me. The multiple-results documentation in PiL reads like a checklist of special cases to be memorized. I'm not saying it's something
```that should or could be changed; it just feels forced.
```
```
PiL says:

```
1) Lua always adjusts the number of results from a function to the circumstances of the call.
```
```
2) When we call a function as a statement, Lua discards all of its results.
```
```
3) When we use a call as an expression, Lua keeps only the first result.
```
```
4) We get all results only when the call is the last (or the only) expression in a list of expressions.
```
```
It seems pretty clear to me. The short summary (leaving out the obvious case of function call statements) is:
```
```
1) Lua expects an expression to yield exactly one value except when the expression is the last (or only) expression in an expression-list, in which case it yields all of its values.
```
```
2) Expression lists (as a whole) are adjusted to the context of an expression list, by either discarding extra results, or by appending a sufficient number of nils.
```
Rule 2 means that:

a, b = foo()

```
will adjust foo() to 2 return values, since clearly two values are expected (and since foo() is the only expression in an expression list.)
```
```
The one apparent exception to this is numeric for statements, because "a,b,c" in:
```
for i = a, b, c

```
is not grammatically an expression list. (It is <expr> "," <expr> ["," <expr>] )
```
```
Normal value adjustment would result in the last value being nil rather than 1 if the rule were applied literally, but possibly it would be less surprising if
```
for i = ...

```
were valid, with the third value being treated as 1 if it were nil (and possibly the second value being treated as the first value.)
```

```