如何在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)