Lua表错误?

问题描述:

我正在进行一种“测验”,我希望脚本从表格中随机选择一个问题。没有错误,但是当我运行脚本时,没有任何东西被打印出来。似乎for循环只是越过了。我在做一些愚蠢的事情吗?谢谢你的帮助。Lua表错误?

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() 

#的操作者仅在有效的序列,即,与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开始从documentation序列索引定义:

除非给出了一个__len元方法,否则表t的表的长度仅在表是一个序列时定义,也就是说,对于某个整数n,其正数字键集合等于{1..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 
+0

谢谢!现在它工作正常。 – user3314993

+1

@ user3314993:很高兴听到它!如果可以,请记住[标记接受的答案](http://*.com/help/someone-answers)。 –