[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: no return value vs. nil return value(s)
- From: Dirk Laurie <dpl@...>
- Date: Mon, 12 Sep 2011 11:26:27 +0200
On Mon, Sep 12, 2011 at 09:17:56AM +0200, Enrico Colombini wrote:
> On 12/09/2011 8.17, Dirk Laurie wrote:
> > In both cases, the behaviour seems not to be planned for, but
> > not sufficiently obnoxious to justify testing for it.
>
> Speaking of testing (nothing new here):
>
> type(f()) --> stdin:1: bad argument #1 to 'type' (value expected)
> type(g()) --> nil
It is clear that at the level of the C API, there is a difference
between a stack of length 1 containing a nil and a stack of length
0. The Lua libraries are written in C and make use of the C API.
The documentation of lua_CFunction says:
To return values to Lua, a C function just pushes them onto the
stack, in direct order (the first result is pushed first), and
returns the number of results.
>From this, it seems that it is not an implementation detail that
`return` and just reaching `end` do the same, which is different
from `return nil`, which is different from `return nil,nil` etc.
It is fundamental to the way the stack and C API works.
That does not change my opinion that it is bad design to rely on
the difference between `return` and `return nil`,
Dirk