Luabind:在调用表内部的函数时,如何使用表的存储值?

Luabind: How can I use a table's stored values when calling a function inside of it?

本文关键字:何使用 存储 函数 调用 内部 Luabind      更新时间:2023-10-16

我在LUA中创建表并将其存储为Luabind对象。然后,我想调用存储在其中一个表中的函数,所以我会做这样的事情

data["onPrimaryFire"](player, x, y, a);

data在其内部有一个名为ammo的字段。但是,我无法在onPrimaryFire功能中引用此字段。它作为nil返回。我知道我可以通过将data作为参数传递给功能来解决此问题,但是这感觉很奇怪和不必要。可以做到吗?

是 - lua包含句法糖,使调用成员功能变得简单。

首先,考虑这种替代写作和调用您的功能的方式:

function data.onPrimaryFire( aPlayer, aX, aY, aA )
    -- do stuff, but cannot access data
end
data.onPrimaryFire( player, x, y, a )

您定义功能,然后调用。为了做您想做的事,您需要将数据作为参数传递:

function data.onPrimaryFire( aMyData, aPlayer, aX, aY, aA )
    -- do stuff, aMyData.ammo is accessible
end
data.onPrimaryFire( data, player, x, y, a )

正如您所说,这很麻烦,但是Lua的捷径可以使用':'而不是'。'

重现此模型。
function data:onPrimaryFire( aPlayer, aX, aY, aA )
    -- do stuff, self.ammo is accessible
end
data:onPrimaryFire( player, x, y, a )

因此,这里发生的是,当您调用数据:onprimaryfire()时,数据表将自动传递为第一个(无形)参数到该函数。在所谓的函数中,它称为"自我"。

使用此表格时,请小心保持一致!如果您使用":"定义函数,但是"。"。调用它时,您将将"播放器"作为"自我"传递,您的所有参数都是错误的。但是,如果您了解它们的工作原理,则可以混合并匹配表格。例如:

function data.onPrimaryFire( aSelf, aPlayer, aX, aY, aA )
    -- do stuff, aSelf.ammo is accessible
end
data:onPrimaryFire( player, x, y, a )