功能,表格和Lua

时间:2012-05-02 22:31:57

标签: arrays function for-loop lua lua-table

现在我正在做一些测试,但我似乎无法找到这段代码有什么问题 - 任何想法?

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秒左右调用一次此功能。我真的不知道为什么会这样。非常感谢任何帮助,谢谢。

2 个答案:

答案 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关键字来限制变量的范围。