WoW 2.0 中...的使用技巧

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值