如何在lua中为闭包提供参数
我有以下代码:如何在lua中为闭包提供参数,lua,closures,Lua,Closures,我有以下代码: { identifier = "hand:" .. card.name, area = { x, y, 100, 100 }, on_click = function() -- Code goes here end } 我想使用card变量和对放置此代码的对象的引用来修改具有card变量值的类的变量 那么,如何将本地上下文中的参数提供给将在其他代码段中调用的函数呢 我希望在事件管理循环中启动单击时的功能。在分配功能时保存它,如
{
identifier = "hand:" .. card.name,
area = { x, y, 100, 100 },
on_click = function()
-- Code goes here
end
}
我想使用card变量和对放置此代码的对象的引用来修改具有card
变量值的类的变量
那么,如何将本地上下文中的参数提供给将在其他代码段中调用的函数呢
我希望在事件管理循环中启动单击时的
功能。在分配功能时保存它,如下所示
{
identifier = "hand:" .. card.name,
area = { x, y, 100, 100 },
on_click = function()
local a_card = card
print(a_card.name)
end
}
如果我正确理解了这个问题,您希望能够从on_click handler引用on_click
handler所属的对象。为此,您需要拆分您拥有的语句:
local card = { name = "my card" }
local object = {
identifier = "hand:" .. card.name,
area = { x, y, 100, 100 },
}
object.on_click = function()
-- Code goes here
-- you can reference card and object here (they are upvalues in this context)
print(card.name, object.area[3])
end
object.click()
您也可以在单击时稍微不同地定义;在这种情况下,您将获得隐式声明的对象作为self
变量(注意,您对它的调用也有点不同):
原始问题中的{
和}
正在创建一个表。他们不是一个C错误;这是有效的Lua语法。我不完全理解变量作用域是如何工作的,但是card
即使在另一个地方被调用,也可以从on\u click
函数访问它。你不需要“保存它”,你可以直接从on\u click
函数使用card
,因为它看起来是外部作用域中的局部变量(在{}
之外)。Lua使用完整的词法作用域,这意味着您的函数(本质上是a)可以使用外部作用域中的任何局部变量,即使在作用域结束并且函数被保留为引用(对于回调、处理程序来说很常见)之后也是如此。
function object:on_click()
-- Code goes here
-- you can reference card and object here
print(card.name, self.area[3])
end
object:click() -- this is the same as object.click(object)