Module:Template test case: Difference between revisions
when doing Template class memoization, return wrapper functions for the values rather than the values themselves
(memoize expensive method calls in the Template objects) |
(when doing Template class memoization, return wrapper functions for the values rather than the values themselves) |
||
Line 40: | Line 40: | ||
-- Memoize expensive method calls | -- Memoize expensive method calls | ||
local | local memoFuncs = {} | ||
return setmetatable(obj, { | return setmetatable(obj, { | ||
__index = function (t, key) | __index = function (t, key) | ||
if Template.memoizedMethods[key] then | if Template.memoizedMethods[key] then | ||
local | local func = memoFuncs[key] | ||
if | if not func then | ||
local val = Template[key](t) | |||
func = function () return val end | |||
memoFuncs[key] = func | |||
end | end | ||
return func | |||
else | else | ||
return Template[key] | return Template[key] |