どうしてLuaにContinueがないの?

1891 ワード

転載先:https://www.cnblogs.com/jeJee/archive/2012/09/22/2697952.html
Luaにcontinueがない問題についてはluaを使った人が多く出会ったと信じており、公式にも説明されている.(公式応答)Luaではrepeat untilはC++のdo whileに少し似ているが、メカニズムには少し違いがある.Luaのuntilの条件式では、式中の変数はrepeat untilコードブロック内で宣言された局所変数であってもよいが、C++ではwhileの条件表達式中の変数はdo while内部で宣言された一時変数を出現させることは許されない.do while外部宣言の変数でなければなりません.
この理由に基づいて,Luaがcontinueをサポートしていると仮定し,以下のコードを考慮した.
local a = 1  -- outer
repeat
    if f() then
        continue
    end
    local a = 1  -- inner
    ...
until a == 0

continueは後のlocal a=1の声明をスキップするので、until a==0は内部のlocal aなのか外部のaなのかで曖昧になります!
では、他のメカニズムでcontinueをコードするにはどうすればいいのでしょうか.比較的簡単な方法があります.ループ内にrepeat...until trueをセットし、continueを使いたい場所をbreakと書きます.次のようになります.
for i = 1, 10 do
    repeat
        if i == 5 then
            break
        end
        print(i)
    until true
end