Lua中'arguments.callee'的类比

时间:2011-11-09 13:40:48

标签: function lua self-reference

有没有办法在Lua中引用当前正在执行的匿名函数?就像我们可以在arguments.callee的JavaScript中一样。

E.g:

local function newLiftAnimator(obj)
  local count = 0
  return function(event)
    -- animate obj's properties here on each "enterFrame" event
    obj.y = obj.y - 1
    count = count + 1
    -- when done, remove event listener
    if count >= 100 then
      Runtime:removeEventListener("enterFrame", **<this_function>**)
    end
  end
end

Runtime:addEventListener("enterFrame", newLiftAnimator(ball))

3 个答案:

答案 0 :(得分:4)

尝试

local f
f=function (event) ... Runtime:removeEventListener("enterFrame", f) ... end
return f

答案 1 :(得分:2)

没关系。在Lua的邮件列表中阅读this old message之后,我想出了一个明显的解决方案:

local function newLiftAnimator(obj)
  ...
  local function animator()
    ...
    Runtime:removeEventListener("enterFrame", animator)
  end
  return animator
end

答案 2 :(得分:1)

另一种可能性是使用:

debug.getinfo(1,'f').func