如何删除匿名的事件侦听器?

所以,我遇到了一个问题,在其他语言中已经解决了,但在Corona/Lua中还没有。如何删除带有匿名函数的事件侦听器?

似乎应该“存储对函数的引用”,但我不确定Lua中的语法是什么。我花了一些时间查找,找到的最接近的匹配是此答案,但由于它是JavaScript,对我来说没有什么帮助。

原文链接 https://stackoverflow.com/questions/7143626

点赞
stackoverflow用户686008
stackoverflow用户686008

将下面翻译成中文并且保留原本的 markdown 格式

存储一个函数的引用与存储变量的引用完全相同。为了稍后操作一个对象,你需要给它一个名称,对吧?那么,函数也是一样的。

顺便说一下,当使用函数作为监听器时,这只是一个问题。但是还有一种事件监听器的样式,你可以使用一个表格作为监听器,然后在该表格中使用一个名为事件的函数: http://developer.anscamobile.com/content/application-programming-guide-event-handling#Listeners_and_Event_Delivery

通常我更喜欢使用表格监听器。

2011-08-23 12:43:13
stackoverflow用户221509
stackoverflow用户221509

Lua 中没有所谓的 “remove event listener”(移除事件侦听器)操作。这由使用事件侦听器的库 / 框架(在您的情况下为 Corona)进行处理。我没有使用 Corona 的经验,但您是否查看过 removeEventListener() 文档(http://developer.anscamobile.com/reference/index/objectremoveeventlistener)?

看起来您只需要保存您的侦听器的引用,以便稍后可以将其删除。也就是说,不要这样做:

Runtime:addEventListener( "enterFrame", function() ... end )
-- 无法移除该侦听器,因为您没有其引用

而是这样做:

-- 存储对侦听器的引用,以便稍后可以将其删除
-- 相当于:local handler; handler = function() ... end
local function handler() Runtime:removeEventListener("enterFrame", handler) end
Runtime:addEventListener( "enterFrame", handler )
2011-08-23 17:40:37
stackoverflow用户2656328
stackoverflow用户2656328
抱歉,上面的回答是无意义的!像这样做:

local function xyz() blabla
end

--或者

local xyz = function() blabla
end

--添加监听器

Runtime:addEventListener('enterFrame',xyz)

--再次移除

Runtime:removeEventListener('enterFrame',xyz)
2013-08-29 09:42:40