[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: use of gettop to change functionality
- From: Eduardo Ochs <eduardoochs@...>
- Date: Tue, 1 Mar 2011 15:48:27 -0300
On Tue, Mar 1, 2011 at 3:27 PM, Eduardo Ochs <eduardoochs@gmail.com> wrote:
> On Tue, Mar 1, 2011 at 8:39 AM, steve donovan <steve.j.donovan@gmail.com> wrote:
>> On Tue, Mar 1, 2011 at 1:30 PM, Gunnar Zötl <gz@tset.de> wrote:
>>> Nope, it should not. Passing three nils is not the same as passing nothing at all.
>>
>> And this is in fact useful.
>>
>> Consider the library function io.lines(); called without any
>> arguments, it iterates over standard input. Pass it a file name, it
>> iterates over that file if it can.
>>
>> It would _not_ be nice if io.lines(nil) would open stdin, since an
>> accidental nil variable is all too common. Instead, it gives you an
>> error, as it should.
>>
>> steve d.
>
> As far as I can remember (corrections, please?) "nil" only corresponds
> "nothing" in these two situations: when vlists are extended (and
> internally it is lua_settop that does that) and when table fields are
> set... so, "foo(nil, nil, nil)" receives a vlist with dracula 3, while
> "foo()" receives a vlist with dracula 0. When packed as tables these
> vlists look like {n=3} and {n=0}.
>
> Here's a version of table.insert that accepts an arbitrary number of
> objects to insert:
>
> mytableinsert = function (T, ...)
> local objects = table.pack(...)
> for i=1,n do
> T.n = T.n + 1
> T[n] = objects[i]
> end
> return T
> end
>
> See:
>
> http://lua-users.org/lists/lua-l/2011-02/msg01467.html
> http://lua-users.org/lists/lua-l/2011-02/msg01477.html
> http://www.lua.org/work/doc/manual.html#pdf-table.pack
> http://www.lua.org/work/doc/manual.html#lua_gettop
> http://www.lua.org/work/doc/manual.html#lua_settop
>
> Cheers,
> Eduardo Ochs
> eduardoochs@gmail.com
> http://angg.twu.net/
Oops, two corrections...
for i=1,n do
should have been:
for i=1,T.n do
and "nil" also corresponds to "nothing" (or better: to "not found") in
lua_getfield and friends...
Sorry!
Eduardo