我的 Lua goto 有问题。 运行脚本后出现错误: 未定义标签'返回'
代码:
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 变量线性方程组的程序的一部分。
问题出在哪里?谢谢大家的回复
Lua手册说:
您的代码中发生了什么:
back
从线上看不到 goto back
k
谢谢回复。 我用第二个函数解决了这个问题(从 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
当然你不能跳进for循环。这不是Lua的问题。 For 循环是一个作用域,在您的情况下,它具有局部变量“k”,该变量在作用域的开头、“后退”标签之前初始化。您甚至希望您的代码做什么?跳转到 ::back:: 后,字面上的下一行是“for l = 1, k-1 do” - 但变量“k”不存在。那么你到底希望你的代码能用它来做什么呢? 这就是为什么像 Lua/Java/Python 这样不声明变量或其类型的简单语言对于程序员来说是如此可怕。使用它们的人不知道他们的程序在做什么。你需要对变量、作用域等有清晰的了解