【发布时间】:2010-09-13 15:12:15
【问题描述】:
最近,Lee Baldwin 展示了如何编写generic, variable argument memoize function。我认为最好返回一个只需要一个参数的更简单的函数。这是我的全部虚假尝试:
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 函数没什么大不了的。
【问题讨论】:
标签: generics functional-programming lua