[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: unpack, pcall, nil
- From: Duncan Cross <duncan.cross@...>
- Date: Mon, 21 Sep 2009 04:06:34 +0100
2009/9/21 Saurabh T <saurabh@hotmail.com>:
> I'm working with Lua scripts driving C code and trying to write a wrapper
> around functions like so
>
> function doit()
> local status, err = pcall(unpack(arg))
> -- do something with status and err
> end
>
> and
>
> doit(x, arg1, arg2, ...)
>
> Now the problem is arg1, arg2 etc can genuinely be nil, and unpack stops at
> nil. Is there any way I can get unpack to get all the entries in the table,
> whether or not they are nil? Thanks,
> saurabh
As Luiz and Shaun have already pointed out, what you want here is
pcall(...), instead. However, to directly answer your question as well
anyway, there *is* a way to get unpack to get all the entries in a
table, using optional extra parameters of unpack():
local a = {}
a[5] = 'x'
print(unpack(a)) --> (nothing)
print(unpack(a, 1, table.maxn(a))) --> nil, nil, nil, nil, 'x'
...if you can improve on the performance of table.maxn() by knowing
the number of elements in advance, so much the better. For a vararg
list you can use select('#', ...) to get this.
-Duncan