Lua表错误?

时间:2014-02-16 02:44:28

标签: lua lua-table

我正在进行一种'测验',我希望脚本从表中挑选一个随机问题。没有错误,但是当我运行脚本时,没有任何内容被打印出来。似乎for循环只是被跳过了。我做了些蠢事吗?谢谢你的帮助。

local Questions = {
Q1 = {"What is the magic word?", "lotion"}, --Q, A
Q2 = {"Does anyone love you?", "no"}
}

for i = 1, #Questions do
local number = math.random(1, #Questions)
local q = Questions["Q" .. number][1]
local a = Questions["Q" .. number][2]
print("HI")
print(q .. a)
end

io.read()

2 个答案:

答案 0 :(得分:2)

#运算符仅在序列中有效,即类似于数组的表,其索引为12,依此类推。但是你的表Questions不是一个序列。你可以这样做:

local Questions = {
    {"What is the magic word?", "lotion"}, --Q, A
    {"Does anyone love you?", "no"}
}

for i = 1, #Questions do
    local number = math.random(1, #Questions)

    local q = Questions[number][1]
    local a = Questions[number][2]
    print("HI")
    print(q .. a)
end

答案 1 :(得分:2)

发生这种情况的原因是因为没有为索引不是从1开始的序列的表定义长度运算符(#)。来自documentation

  

除非给出__len元方法,否则仅在表是序列时定义表t的长度,即,其正数字键的集合等于{1。 .n}对于某个整数n。在这种情况下,n是它的长度。

要修复代码,您只需删除表格键上的“Q”前缀:

local Questions = {
    {"What is the magic word?", "lotion"}, --Q, A
    {"Does anyone love you?", "no"}
}

for i = 1, #Questions do
    local number = math.random(1, #Questions)
    local q = Questions[number][1]
    local a = Questions[number][2]
    print("HI")
    print(q .. a)
end