Module:Template test case: Difference between revisions

    (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 memoizedValues = {}
    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 val = memoizedValues[key]
    local func = memoFuncs[key]
    if val then
    if not func then
    return val
    local val = Template[key](t)
    else
    func = function () return val end
    val = Template[key](t)
    memoFuncs[key] = func
    memoizedValues[key] = val
    return val
    end
    end
    return func
    else
    else
    return Template[key]
    return Template[key]