Итерируемый класс


List = {}

function List:new(q)
   local q = q or {}
   setmetatable(q, self)
   self.__index = self
   self.__pairs = function (t)
      return function (t, k)
        local v
        k,v = next(t,k)
        if v~=nil then return k,v end
      end, t, nil
   end
   return q
end

function List:prnt()
  for k,v in pairs(self) do
    print('>',k,v)
  end
end


d1 = List:new({1,2,3})
d2 = List:new({5,6,7})

print(d1)
d1:prnt()

for k,v in pairs(d1) do
   print(k,v)
end

for k,v in pairs(d2) do
   print(k,v)
end