如果在lua中执行内部'for'循环,如何跳出外循环

时间:2014-04-15 17:46:04

标签: loops lua

S = 'MSH, mdmOBX, TXA'
for u in string.gmatch(S, "([^,%s]+)"),1 do
    l[k] = u
    for a in string.gmatch(u,'.-([A-Z].*)'),1 do       
        g[z] = a
        print(g)
        _G["Map"..l[k]](Msg[g[z]],R[1])
    end
    _G["Map"..l[k]](Msg[l[k]],R[1])     
end

我有上面的代码,我希望只有在内部for循环没有被执行时才会执行内循环之外的语句,我尝试使用' break'关键字,但没有工作,控制权传递给outerloop。如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

从Lua 5.2开始,你可以

goto label -- This statement goes to the jump-label label
::label:: -- THe jump-label label

使用在每个循环之后检查的标志变量,可以使用连续的break语句设置它以进行早期救助,这是一个经典的担心goto,或者因为缺乏它而受到谴责。 / p>

local earlyreturn
for u in ... do
    for a in ... do
        if ... then
            earlyreturn = true
            break
        end
    end
    if earlyreturn then
        break
    end
end

无论如何,您还可以将循环包装在函数中并使用return

function(...)
    for u in ... do
        for a in ... do
            if ... then
                return
            end
        end
    end
end(...)

答案 1 :(得分:2)

从技术上讲,回答"如何打破多个循环":您可以使用带有适当放置标签的goto语句,尽管它可能不是最佳解决方案。如何用if包裹内环的主体呢?