【问题标题】:functions,tables and for in LuaLua 中的函数、表格和 for
【发布时间】:2012-05-12 10:50:46
【问题描述】:

现在我正在做一些测试,但我似乎找不到这段代码有什么问题 - 知道吗?

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 秒左右就会被调用一次。我真的不知道为什么会这样。任何帮助将不胜感激,谢谢。

【问题讨论】:

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


    【解决方案1】:

    如果此行记录:

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

    【讨论】:

    • 哇,谢谢,因为 lua 是如此高级的脚本,我认为通过执行此 Array2D[y]={} 它也会同时声明,只需执行本地 Array2D = {} 固定非常感谢你
    • 不客气。我也对 Mud 的回答投了赞成票,因为他关于使用 pcall 的说明是有效的 - 在这种情况下,它会帮助您从 Lua 获得错误消息。不过,通常由主机程序为您执行此操作。
    【解决方案2】:

    看起来Array2D 没有初始化(或者不是表),所以它在Array2D[y]={} 上废话。

    您可以使用pcall 来调用函数并捕获错误,如下所示:

    local ok, msg = pcall(IATetris, pieza, rotacion, array)
    if not ok then
        print("ERROR:", msg)
    end
    

    附注:您应该尽可能使用local 关键字来限制变量的范围。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      相关资源
      最近更新 更多