Lua的索引只适用于哪些地方?
让我先展示我的代码:
local names = {}
str = "Hello World"
for count = 0, #str do
names[count] = string.sub(str, count, count)
names[count].id = count
end
顺便说一句,这只是一个示例,但我的概念在这里。无论如何,它一直返回一个错误,说尝试索引字段“?”(空值)。这个错误是什么意思?我在我的其他项目中尝试使用类似的代码,它可以正常工作。除了图片,为什么它不适用于这个实例?索引是在哪里应用的?
原文链接 https://stackoverflow.com/questions/10294041
问题在于,你对如何使用 lua 默认的值类型感到困惑。只有表格(tables)和用户数据(userdata)是你可以设置/获取属性的两种数据类型。我来解析一下你的代码,或许可以帮助你了解如何使用表格来完成你想要的操作...
首先你创建了一个名为 names 的空表格。在这个表格中,没有任何值或属性可供你引用。
local names = {}
在循环中,你逐个取出字符串 "str" 中的字符,并将其赋值给计数器(count)指向的 names 索引。当然你应该从 1 开始计数,因为 lua 中的字符串和表格索引都是以 1 为基础,而不是以 0 为基础。因此在第二次循环时,你实际上做了以下事情:
names[1] = 'H'
(在第一次循环中,计数器为 0,因此 string.sub(str, 0, 0) 返回一个空字符串)
接着,在这之后,你试图同时进行几个步骤,这也是你感到困惑的地方。如果分开写就会清晰一些。
local a_char = names[count] -- 获取索引 'count' 中的字符串值
a_char.id = count -- 尝试在该字符串值中设置属性 "id"
names[count] = a_char -- 将该值赋值给表格 names 中的索引 "count"
上述代码逻辑上等同于 names\[count\].id = count
。你试图在字符串值上创建/设置属性 "id",但是字符串没有那个属性,而且你也不能创建它,这就是解释器会抛出错误的原因。
如果你想要在 lua 表格中存储逻辑信息,则通常使用嵌套表格。看起来你想将字符串 "str" 中的每个字符以及它在表格 "names" 中的位置存储在一起。可以这样实现:
local names = {}
str = "Hello World"
for count = 1, #str do
local cha, idx = string.sub(str, count, count), count
-- 下面创建了一个匿名表格,包含两个属性(character 和 id),然后将它添加到 names 表格的结尾。
table.insert(names, {character = cha, id = idx})
-- 或者
-- names[count] = {character = cha, id = idx}
end
这样就可以将信息逻辑地分组,数据在表格中的样子大致如下:
{ {character = 'H', id = 1}, {character = 'e', id = 2} ... }
如果你想在表格中的第一个项中获取 "id",可以像你之前做的那样引用它:
local first_id = names[1].id -- 从表格 names 中的第一个索引的属性 "id" 中获取值
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我在您的代码中发现两个问题:
1.您从 0 开始索引。Lua 从 1 开始。for 循环应该从 1 开始。 2.您将字符串赋值给表,然后尝试为字符串的 id 字段赋值。但字符串没有字段。这实际上是抛出错误的原因。