Lua中的goto回到for循环

我在Lua中使用goto遇到了问题。 运行脚本后出现错误: undefined label 'back'

代码:

function determinant()
det = 1
for k = n, 2, -1 do
    if a[k][k] == 0 then
        goto skok_jedna
    end
    ::back::
    for l = 1, k-1 do
        for m = 1, k-1 do
            a[l][m] = a[l][m] - a[l][k] * a[k][m] / a[k][k]
        end
    end
    det = det * a[k][k]
end
det = det * a[1][1]
goto konec_det

::skok_jedna::
l = k

::skok_dva::
l = l - 1
if l == 0 then
    det = 0
    return
end

if a[l][k] == 0 then
    goto skok_dva
end

for m = 1, k do
    c[n] = a[l][m]
    a[l][m] = a[k][m]
    a[k][m] = c[m]
end

det = det * -1
goto back
::konec_det::
end

该脚本是使用克拉默法计算n变量线性方程组的程序的一部分。

问题在哪里?谢谢大家回复

原文链接 https://stackoverflow.com/questions/70523546

点赞
stackoverflow用户1847592
stackoverflow用户1847592

Lua 手册说:

  1. 标签在定义它的整个块中可见,除了在嵌套函数内部。
  2. goto 可以跳转到任何可见的标签,只要它不进入局部变量的作用域。

在你的代码中发生了什么:

  1. 标签 backgoto back 的那一行是不可见的。
  2. 你在循环变量 k 的作用域内跳转。
2021-12-29 19:24:11
stackoverflow用户9822593
stackoverflow用户9822593

谢谢回复。

我用第二个函数解决了这个问题(从 for 循环中删除 goto 并返回到 for 循环):

function determinant()
det = 1
for k = n, 2, -1 do
    if a[k][k] == 0 then
        det2 {k}
        if det == 0 then
            return
        end
    end

    for l = 1, k-1 do
        for m = 1, k-1 do
            a[l][m] = a[l][m] - a[l][k] * a[k][m] / a[k][k]
        end
    end
    det = det * a[k][k]
end
det = det * a[1][1]
end

function det2(k)
l = k
::skok_dva::
l = l - 1
if l == 0 then
    det = 0
    return
end
if a[l][k] == 0 then
    goto skok_dva
end
for m = 1, k do
    c[n] = a[l][m]
    a[l][m] = a[k][m]
    a[k][m] = c[m]
end
det = det * -1
end
2021-12-30 14:51:27