Кеширование значений


-- код, любезно предоставленный Рики Лэйком (Rici Lake), rici@ricilake.net
function Memoize(func, t)
  return setmetatable(
    t or {},
    {__index =
      function(t, k)
        local v = func(k);
        t[k] = v;
        return v;
      end
    }
  )
end
 
COLORS = {"red", "blue", "green", "yellow", "black"}
color = Memoize(
  function(node)
    return COLORS[math.random(1, table.getn(COLORS))]
  end
)

далее можно работать с color[1], color[2] и т.п.