技术开发 频道

WoW 2.0 中...的使用技巧

  【IT168 技术文档】WoW 2.0 中的Lua解释器更新到了Lua 5.1, '...' 语句较以前(Lua 5.0前)变的更强大而节省内存. 这里有一些新的使用方法.

  Hooking

  在以前, '...' 语句在调用时会创建一个名为'args' 的表. 在内存中创建了一个表会可能引发垃圾回收. 这是一个缺陷:

  local f = somefunc   somefunc = function(...)   -- do some crap   return f(unpack(args))   end

  如果上面这个函数被频繁调用将对性能造成很大影响. 而在Lua 5.1 中这样使用hook将不会造成内存浪费.

  local f = somefunc   somefunc = function(...)   -- do some crap   return f(...)   end   Post-hooks

  这个新功能同样允许创建一个漂亮的post-hook. 这个例子中, 我们需要第一个参数被传入, 并且需要完整的原始参数列表和完整的原始返回值. 可以参考如何安全的Post-Hook一个函数

  local f = somefunc   local ph = function(a1, ...)   -- do something with a1   return ...   end   somefunc = function(a1, ...)   return ph(a1, f(a1, ...)   end

  迭代

  和hooking一样, 迭代同样会创建表而浪费内存, 在Lua 5.1 中变的就更干净了.

  function f(...)   for i=1,select("#", ...) do   local x = select(i, ...)   -- do something with x   end   end

  译注: 通过select("#", ...)这样的语法可以取到参数的个数, 通过select(i, ...)取到第i个参数.

  递归

  '...' 使递归变的更整齐

  function r(x, ...)   local y = x*x   if select("#", ...) > 0 then   return y, r(...)   else   return y   end   end
0
相关文章