我有 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
該腳本是使用 Cramer 規則計算 n 變數線性方程組的程式的一部分。
問題出在哪里?謝謝大家回復
uj5u.com熱心網友回復:
Lua手冊說:
- 標簽在定義它的整個塊中可見,嵌套函式內部除外。
- 只要不進入區域變數的作用域,goto 就可以跳轉到任何可見標簽。
您的代碼中發生了什么:
back從線上看不到標簽goto back- 你跳入回圈變數的范圍內
k
uj5u.com熱心網友回復:
謝謝回復。我用第二個函式解決了這個問題(從 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402092.html
