在LUA中将函数名作为参数传递。

我有一个按钮类,其中创建了我的按钮:

self.button = widget.newButton {..., onEvent = handleEvent}

我想在主程序中调用该按钮类,所以我这样做:

local button = Button:new(..., handle)

问题是我的所有事件处理程序都位于按钮类中。我如何从类外传递事件处理程序的名称?

我不能只传递它作为句柄或"handle" ... 我想我必须将其作为函数传递,但我该如何做到这一点?

点赞
用户646619
用户646619

Lua中的函数是一等公民,可以像其他值一样进行处理;它们可以分配给变量或作为函数参数传递。

local function cb() ... end
local button = Button:new(..., cb)

或者不使用局部变量。

local button = Button:new(..., function() ... end)

如果您想在按钮类上调用方法,则也可以使用闭包:

self.button = widget.newButton {..., onEvent = function() return self:onPressed() end)
2014-06-25 15:08:12