这里的问题是你对如何使用默认的 lua 值类型感到困惑。表和用户数据是您将设置/获取属性的仅有的两种数据类型。我会分解你的代码,所以也许它会帮助你理解如何使用表格来做你想做的事......
您开始创建一个名为名称的空表。该表中没有您可以引用的值或属性。
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
上面的代码在逻辑上等价于 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