我正在尝试创建一个表作为用户的小型数据库:
users = {}
function create_new_user()
print("Enter a unique user name (up to 12 letters): ")
local name = io.read()
if #name > 12 then
print ("That name is too long.")
return create_new_user()
elseif users[name] then
print ("That name is already in use.")
return create_new_user()
else
table.insert(users, 1, name)
print("Your new user name is: ", users[name])
end
end
我从手册中了解到该行
table.insert(users, 1, name)
会插入name的字符串值作为users数组的元素。事实并非如此 - 每当我运行脚本时,我得到以下输出:
Your new user name is: nil
答案 0 :(得分:3)
您将元素插入到表中,但是您尝试检索由name
的值索引的值,这不是您存储的值(您使用的是users[name]
而不是{{1 }})。你可以做这样的事情:
users[1]
请注意,table.insert(users, name)
print("Your new user name is: ", name)
可能无法达到预期效果,因为这会将 prepend 元素添加到表中。如果您以这种方式插入table.insert(users, 1, name)
和"abc"
,那么"def"
表将包含元素users
(按此特定顺序)。要检索最后插入的元素,您可以使用{"def", "abc"}
。
如果您想以不同的顺序存储值,则需要使用users[1]
,将追加元素添加到表中。要检索最后一个元素,您可以使用table.insert(users, name)
。
如果您总是希望将添加的元素存储在表格的第一个位置,那么您只需使用users[#users]
。
答案 1 :(得分:3)
在这里,您使用字符串(名称)索引用户表:
elseif users[name] then
你在这里做同样的事情:
print("Your new user name is: ", users[name])
但您使用数字索引存储名称:
table.insert(users, 1, name)
你想要的不是那条线:
users[name] = name
或者这(需要更改后面的行):
users[name] = true
这个想法是你只是真正使用密钥来创建一个查找表。