Luabind:在调用表内部的函数时,如何使用表的存储值?
Luabind: How can I use a table's stored values when calling a function inside of it?
我在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 )
相关文章:
- 使用QProcess执行命令,并将结果存储在QStringList中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 如何创建和使用存储为 c++ 对象的 python 对象?
- MoveToEx和LineTo不使用存储在顶点(push_back)win32 c++中的MAKEPOINTS进行绘制
- C++使用存储过程返回结果
- 读取.csv文件并仅使用 C++ 存储到数组中<iostream>
- 何时有效使用存储桶排序以及需要多少存储桶
- OpenSSL:我使用存储外部文件的RSA密钥加密和解密文件,但有时我的程序会崩溃
- std::forward_list -- 使用存储的迭代器擦除
- 如何使用存储在列表中的特定元素范围初始化向量
- CLI / c++.如何使用存储在变量中的名称来引用box
- 仅使用存储在数组中的字符串的第一个字母
- QPixmap不能使用存储在变量中的图像路径
- 使用存储shared_ptr<T>中的shared_ptr<常量 T>
- 实现使用 C++ 存储任何类型的哈希
- 使用存储在vector中的函数指针
- 获取函数指针或使用存储在字符串中的函数名对函数求值