Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *LUA* | Индексация по сложному объекту (для кеширования) (http://forum.oszone.net/showthread.php?t=255007)

pva 26-02-2013 21:04 2099673

*LUA* | Индексация по сложному объекту (для кеширования)
 
Всем привет! Задача такая: Нужно посчитать, сколько раз вызывается одна и та же функция с одним и тем же набором параметров (и перечислить их)

Переформулировка: допустим, есть функция, которая возвращает таблицу.
Код:

function make_obj(name, data)
  return {name=name, data=foo(data)}
end

Нужно сделать так, чтобы она создавала эту таблицу ровно один раз для каждого набора параметров {name, data}. А если такой набор уже создан, то возвращала созданный ранее набор.
Т.е. нужно организовать такое кеширование.

Сейчас делаю так: завожу глобальную таблицу, индексируемую конкатенированными параметрами в виде строк:
Код:

_cache = {}
function make_obj(name, data)
  local id, have_cache
  id = string.format("%s %s", tostring(name), tostring(data))
  have_cache = _cache[id]
  if not have_cache then
    have_cache = {name=name, data=foo(data)}
    _cache[id] = have_cache
  end
  return have_cache
end

Есть ли способ кешировать проще?


Время: 08:19.

Время: 08:19.
© OSzone.net 2001-