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

时间:2014-02-05 00:09:45

标签: c++ luabind

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

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

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

1 个答案:

答案 0 :(得分:0)

是的 - 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()时,数据表会自动作为第一个(不可见)参数传递给函数。在被调用函数内部,它被称为“自我”。

使用此表格时,请注意保持一致!如果使用“:”来定义函数,但“。”在调用它时,你会将“player”作为“self”传递,所有参数都将是错误的。但是,如果你了解它们的工作原理,你可以混合和匹配表格。例如:

function data.onPrimaryFire( aSelf, aPlayer, aX, aY, aA )
    -- do stuff, aSelf.ammo is accessible
end

data:onPrimaryFire( player, x, y, a )