lua-users home
lua-l archive

Re: unpack, pcall, nil

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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

AltStyle によって変換されたページ (->オリジナル) /