最近因为工作要求学习了lua,具体的lua如何我就不详细解释了,主要说一下table的下标调用这方面的东西。
1.什么是table?
table是lua中唯一的数据结构,与其他的语言的数据结构相比,比如c++的array以及lists,它实现了这些数据结构的功能同时功能更加强大,比如自带了搜索算法还有table的大小不必定义,可以自己动态增加的。
2.table下标问题
local a= {}
这就直接定义了a是一个table 注意:定义的时候 要么是字符串= 要么是["字符串"]= 要么是[数字]= 所有的key只能这样
a={x=13,["y"]=14,[3]="qewr"}
第一种 可以 使用 print(a.x/a["x"]) 输出13
第二种 使用print(a["y"]/a.y) 输出 14
简单来说:a.啥的只能针对于字符串下标,而a[]字符串和数字都可以 但是字符串得有""
3.table 默认下标
local a={[1]= 11,[2]= 12,[3]= 13,[4]=14}
local a={11, 12, 13,14}
上诉两种print(a[1]) 输出都是11 输出的结构是一样的
4.table中的table
local a = {
b = {12,22},
[1]={3,4},
{5,6}
}
此时的调用如上 使用 a.b 则是一个新的table
print(a.b[1])会输出12
但是使用print(a[1][1])的时候 却是会覆盖掉[1]={3,4}的 也就是会输出5,因为没有key值时,table中的元素会默认为1,所以以后使用的时候必须规避这种问题。
同理
local a = {
--b = {12,22},
{7,8},
[1]={3,4},
{5,6},
[2]={9,10}
}
print(a[2][2]) 输出的结果会是6 因为默认排序的{5,6}会把[2]={9,10}覆盖掉。
分享到:
相关推荐
// lua_next() 会使用栈顶元素作为Key去定位本次需要取出Table里面的那个值对 // 如果Key=nil, 那就表示本次取出的是第一个元素 // 它会先将当前的这个Key弹出,然后将本次取出的Key/Value压入栈, Value在栈顶 // 一...
在Lua中,调用C++函数通常需要通过全局环境中的一个表(table)来完成,这个表是C++导出给Lua的接口。例如,你可能会看到类似以下的Lua代码: ```lua local cplusplus = require("cpp_module") -- 加载C++模块 ...
- **从Java调用Lua**:创建Lua状态(LuaState),然后使用`lua_getglobal`获取Lua函数,接着通过`lua_pcall`调用该函数。传入参数可以通过`lua_pushXXX`系列函数压栈,返回值则通过`lua_toXXX`系列函数读取。 - *...
例如,可以使用`Lua.DoFile`或`Lua.DoString`方法执行Lua代码,并通过`Lua.GetTable`、`Lua.GetGlobal`等方法获取和设置Lua全局变量或表。 4. **在Lua中调用.NET**:在Lua中,可以使用`require`函数加载...
Lua的五种基本类型(nil, boolean, number, string, table)都可以在C API中找到对应的处理函数。例如,`lua_tonumber()`和`lua_tostring()`用于将Lua值转换为C中的数值和字符串。 **5. 错误处理** C调用Lua时可能...
1. **查找Lua函数**: 在执行了Lua脚本后,你可以通过`lua_getglobal`来获取全局函数,或者通过`lua_gettable`获取表中的函数。 2. **准备参数**: 如果函数需要参数,使用`lua_pushxxx`将参数压入堆栈。 3. **调用...
在实际应用中,我们可能还需要处理lua和C++的数据类型转换,比如将lua的表(table)映射为C++的结构体,或将C++的对象暴露给lua。这通常涉及`lua_to*`和`lua_push*`系列函数的使用,以及自定义的序列化和反序列化...
这意味着 C++ 函数需要接受和返回 Lua 的值(如 `lua_Number`、`lua_Integer`、`lua_Table` 等)。通常,你会使用 `lua_to*` 和 `lua_push*` 系列函数进行类型转换。 3. **错误处理**: 在 Lua 中,错误是通过抛出...
对于表格,使用`lua_createtable`创建并使用`lua_setfield`和`lua_getfield`操作;对于用户数据,可以使用`lua_newuserdata`和`lua_setmetatable`。 最后,文件"VC清理助手.bat"可能是用于清理项目生成的临时文件的...
例如,要获取名为`myVar`的全局变量,我们可以先通过`lua_getglobal`将其推送到栈顶,然后通过类型检查和转换获取其值。 3. **Lua函数调用**:调用Lua函数需要先通过`lua_getglobal`获取函数引用,然后准备参数,...
因此,避免在循环中直接调用`table.remove`是确保安全的关键。 在实际编程中,应根据具体需求选择合适的方法。例如,如果你知道要删除的元素数量较少,且分布不均匀,从后往前删除可能是最高效的。如果元素分布均匀...
表是Lua的核心数据结构,它是一个动态大小的关联数组,可以存储任意类型的值,包括数字、字符串、其他表甚至是函数。在进行两个文件的表比较时,我们通常关心的是表的键(key)和对应的值(value)是否相同。 假设...
LuaTable table = L.checkTable(-1); String key1 = table.getString("key1"); String key2 = table.getString("key2"); // ... } ``` 总结,Lua与Android的交互是通过JNI和Lua引擎实现的,这为Android应用带来...
在处理Lua的table时,经常需要访问table中存储的函数,并调用这些函数来执行相应的操作。 在Lua中访问table里的函数,通常的做法是使用点操作符(.)或者方括号操作符([])来调用存储在table中的函数。使用点操作符...
这个示例仅适用于遍历包含字符串键和值的Lua table,如果table中包含其他类型的数据(如数字、light userdata、其他table等),你需要使用适当的`lua_toXXX`函数来转换这些值,或者在处理复杂结构时自定义逻辑。...
Lua的table元表自我学习笔记分享。--lua元表总结 --1、__index的运用 (调用table的一个不存在的索引时,会使用到元表的__index元方法,搜索元表是否也有改索引,__index可以是一个函数也可是一个table。)
通过`lua_next`函数,可以获得table中的键和值,并使用`lua_type`来检查键和值的类型。 3. 在`popTable`函数中,根据键的类型,可以输出键的数值或字符串。对于值,通过`switch`语句来匹配不同类型的值,包括nil、...
`lua_getglobal`用于获取全局变量(假设是函数),或者`lua_gettable`用于从表中获取函数。`lua_pcall`用于安全地调用 Lua 函数,它可以捕获并处理错误。 4. **接口封装**: 为了简化上述流程,我们可以编写一个...
在Lua编程语言中,table是一种非常灵活的数据结构,它可以存储任意类型的值,包括数字、字符串、函数、甚至其他table。`table.concat`是Lua提供的一个用于处理table的实用函数,特别是当你需要将table中的字符串元素...
在实际开发中,可能还需要处理更复杂的类型转换,比如从Lua传递表(table)到Delphi的记录(record)类型,或者从Delphi传递对象到Lua。这需要对Delphi的内存管理和Lua的数据结构有深入理解。 总结来说,Delphi调用...