lua-users home
lua-l archive

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


Very Cool.
thanks,
wes

On 3/29/07, Diego Nehab <diego@tecgraf.puc-rio.br> wrote:
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.