现在我正在做一些测试,但我似乎无法找到这段代码有什么问题 - 任何想法?
function IATetris(Pieza,Rotacion,Array)
io.write("The table the script received has: ",Pieza,"\n")
RotacionInicial = Rotacion
PosInicial = 7
final = #Array --this gets the size of the array
i = 1
for y = 1, 20 do --the array of my tetris board is 20 in x and 14 in y so it would be something like this Array2D[20][14]
io.write(" First for y ",y,"\n")
Array2D[y]={} --clearing the new array
for x = 1,14 do
io.write(" First for x ",x,"\n")
if i == final then break end
io.write(" First for i",i,"\n")
Array2D[y][x] = Array[i]
i= i+1 --seems like you cant use i++ in lua
end
end
end
我正在做的是获得2个整数和1个数组。我必须在控制台中写一下,检查程序的实际位置,以及我得到的是......
第一条日志消息:"The table the script received has: "
和第二条日志消息:" First for y "
但是我没有得到任何进一步的可能程序崩溃了吗?每20秒左右调用一次此功能。我真的不知道为什么会这样。非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
如果此行记录:
io.write(" First for y ",y,"\n")
并且此行不会记录:
io.write(" First for x ",x,"\n")
然后问题出现在以下一行上:
Array2D[y]={} --clearing the new array
for x = 1,14 do
for x...
绝对适合我,所以我建议它是Array2D系列。它在语法上没有任何错误,因此它必须是运行时错误。 Lua或其嵌入的应用程序应报告运行时错误。如果它们不是,并且功能只是“停止”,那么你正在调试盲目,你会在这样的问题上浪费很多时间。
我能想到的唯一错误就是Array2D
不是表。因为你试图索引它,它需要。 Array2D
未在您的函数中声明,如果它是已在其他位置定义的全局变量,则可以。但是,如果 只是为此函数设置的局部变量,则应向其添加local Array2D = {}
。
在不知道Array2D
是什么,或者您的实际错误是什么的情况下,很难给出更准确的答案。如果你真的找不到比登录更好的找出问题的方法,那么就在Array2D线之前,我应该测试我的假设:
io.write("Array2D is: ", type(Array2D), "\n")
答案 1 :(得分:2)
看起来Array2D
未初始化(或不是表格),因此它会在Array2D[y]={}
上进行初始化。
您可以使用pcall
来调用函数并捕获错误,如下所示:
local ok, msg = pcall(IATetris, pieza, rotacion, array)
if not ok then
print("ERROR:", msg)
end
附注:您应该尽可能使用local
关键字来限制变量的范围。