2

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

例如:

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))
4

3 回答 3

4

尝试

local f
f=function (event) ... Runtime:removeEventListener("enterFrame", f) ... end
return f
于 2011-11-09T13:52:26.400 回答
2

没关系。在阅读了 Lua 邮件列表中的这条旧消息后,我想出了一个明显的解决方案:

local function newLiftAnimator(obj)
  ...
  local function animator()
    ...
    Runtime:removeEventListener("enterFrame", animator)
  end
  return animator
end
于 2011-11-09T13:56:11.610 回答
2

另一种可能性是使用:

debug.getinfo(1,'f').func
于 2011-11-09T13:59:37.173 回答