lua-users home
lua-l archive

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


On Thu, Dec 8, 2011 at 20:37, PROXiCiDE <saiyuk7@gmail.com> wrote:
> 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)
>
>
>

So you want to store your return values in a table, and unpack them at the end.
function Test(f,...)
 local ret = {}
 for i=1,select("#",...) do
 local v = select(i,...)
 if (type(v) == "number") then
 ret[#ret+1] = FileReadSize(f,v)
 end
 return unpack(ret)
end

-- 
Sent from my toaster.