最近,Lee Baldwin展示了如何编写一个通用的可变参数记忆函数。我认为最好返回一个只需要一个参数的更简单的函数。这是我的虚假尝试:
local function memoize(f)
local cache = {}
if select('#', ...) == 1 then
return function (x)
if cache[x] then
return cache[x]
else
local y = f(x)
cache[x] = y
return y
end
end
else
return function (...)
local al = varg_tostring(...)
if cache[al] then
return cache[al]
else
local y = f(...)
cache[al] = y
return y
end
end
end
end
显然,select('#', ...)
在这种情况下失败了,无论如何也不会真正做我想做的事。有没有办法告诉内部memoize f期望多少个参数?
如果您确定,“不”是一个很好的答案。使用两个独立的memoize函数没什么大不了的。