无法向表中添加元素(Lua中的数组)

时间:2014-08-12 19:32:45

标签: arrays lua

我正在尝试创建一个表作为用户的小型数据库:

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

2 个答案:

答案 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

这个想法是你只是真正使用密钥来创建一个查找表。