首先让我展示我的代码行:
local names = {}
str = "Hello World"
for count = 0, #str do
names[count] = string.sub(str, count, count)
names[count].id = count
end
顺便说一下,这只是一个样本,但我的概念就在那里。无论如何,它一直返回一个错误,说试图索引字段'?' (零值)。这个错误是什么意思?我尝试在我的其他项目中使用这样的东西它工作得很好。除了它是一个图像,为什么它不适用于这个实例?索引在哪里适用?
答案 0 :(得分:3)
我发现您的代码有两个问题:
答案 1 :(得分:3)
这里的问题是你对如何使用默认的lua值类型感到困惑。 tables和userdata是您将设置/获取属性的唯一两种数据类型。我会分解你的代码,所以它可能会帮助你理解如何使用表来做你想要的......
你开始创建一个名为names的空表。该表中没有可以引用的值或属性。
local names = {}
在你的for循环中,你从字符串'str'一次拉出一个字符,并将它分配给count指向的索引处的名称(应该从1开始,顺便说一下..因为字符串和表索引在lua是1基于,而不是基于零。所以在第二个循环中,你基本上是这样做的:
names[1] = 'H'
(首先循环计数器为0,所以string.sub(str,0,0)返回一个空字符串)
直接在那之后,你马上做了几个步骤,这就是你感到困惑的地方。打破它应该为你清理它。local a_char = names[count] -- get the string value in index 'count'
a_char.id = count -- try to set property id on that string value
names[count] = a_char -- assign this value to index 'count' in table 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
-- below creates an anonymous table with two properties (character, and id) and
-- adds it to the end of table 'names'.
table.insert(names, {character = cha, id = idx})
-- or
-- names[count] = {character = cha, id = idx}
end
按照您希望的方式对信息进行逻辑分组,数据在表格中大致如下所示:
{ {character = 'H', id = 1}, {character = 'e', id = 2} ... }
如果您想要表格中第一项的ID,您可以像上面所做的那样引用它:
local first_id = names[1].id -- access property id from table in first index in table names