[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Returning a ellipses
- From: Xavier Wang <weasley.wx@...>
- Date: Fri, 9 Dec 2011 12:52:05 +0800
2011/12/9 PROXiCiDE <saiyuk7@gmail.com>:
> Xavier Wang <weasley.wx <at> gmail.com> writes:
>
>>
>> Maybe you can do something like this:
>>
>> function Test(s, a, ...)
>> -- do something to calculate the first field
>> local ret = --....
>> return ret, Test(s, ...)
>> end
>>
>> ---------- Forwarded message ----------
>> From: PROXiCiDE <saiyuk7 <at> gmail.com>
>> Date: 2011/12/9
>> Subject: Returning a ellipses
>> To: lua-l <at> lists.lua.org
>>
>> I want to pass a function that supports
>> ellipses "..." and return several of
>> them into different variables..
>>
>> example
>>
>> function Test(...)
>> end
>>
>> a,b,c,d,e = Test(1,2,3,4,5)
>>
>> Reason for this being, i want to be able to
>> read a structured data into variables...
>>
>> example reason
>>
>> magic,version, headersize,directorycount,directorylocation =
>> ReadDirectory(f,"s",16,32,32,32)
>>
>> S = obviously a String
>> 16 = Int16
>> 32 = Int32
>>
>> I would actually parse the the ellipses using the
>> "var = select(i,...)" from a "for" statement
>>
>> But what i cant understand is how do i seperate
>> these into different variables
>> that are returned
>>
>>
>
>
> Well Test will be reading data from a binary file
> into these specific variables, the ellipses
> would hold the size of the data to be read from the file
>
> example
>
> function Test(f,...)
> for i=1,select("#",...) do
> local v = select(i,...)
> if (type(v) == "number") then
> store_var = FileReadSize(f,v)
> end
> return -- Store Variables here
> end
>
> a,b,c = Test(f,32,16,32)
>
>
>
You can use recurse to avoid table allocate, like this:
function Test(f, v, ...)
if not v then return end
return FileReadSize(f, v), Test(f, ...)
end
maybe you can use my lbuffer module[1], like this:
a, b, c = buffer(f):unpack "i4i2i4"
your second example can be this:
array = buffer(f):unpack "{magic=i2, header=i4, version=i4}"
[1]: https://github.com/starwing/lbuffer