有没有办法确定Lua函数的签名?

Jon*_*son 5 generics lua functional-programming

最近,Lee Baldwin展示了如何编写一个通用的,可变参数memoize函数.我认为返回一个只需要一个参数的简单函数会更好.这是我的全部伪造尝试:

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
Run Code Online (Sandbox Code Playgroud)

显然,select('#', ...)在这种情况下失败并且无论如何都不会真正做我想做的事情.有没有办法告诉内部memoize有多少参数f期望?


如果你肯定知道,"不"是一个很好的答案.使用两个单独的memoize函数并不是什么大问题.

小智 4

我想你可以进入调试信息并从源代码中确定这一点,但基本上它是“不”,抱歉。