lua-users home
lua-l archive

Re: array index and modulo

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


Hi,
I once wrote a little metatable trick to make an array
circular. Here is what I used
 -- circular array metatable
 local function wrap(t, k)
 return ((k-1)%(#t))+1
 end
 local lmt = {
 __index = function(t, k)
 if type(k) == "number" then
 return rawget(t, wrap(t, k))
 else
 return nil
 end
 end
 }
 -- turns a table into a circular array
 function circular(t)
 return setmetatable(t, lmt)
 end
Now you can do something like this
 a = circular{1, 2, 3, 4}
 for i = 1, 10 do
 print(a[i])
 end
 1
 2
 3
 4
 1
 2
 3
 4
 1
 2
[]s,
Diego.

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