Войти

Показать полную графическую версию : *LUA* | Индексация по сложному объекту (для кеширования)


pva
26-02-2013, 21:04
Всем привет! Задача такая: Нужно посчитать, сколько раз вызывается одна и та же функция с одним и тем же набором параметров (и перечислить их)

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

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


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




© OSzone.net 2001-2012