この第一版は Lua 5.0 向けに書かれました。後のバージョンと大差はありませんが、いくつかの違いがあります。
第四版は Lua 5.3 を対象として Amazon や書店でお求めいただけます。
書籍を購入されると、Lua プロジェクトのサポートにもご協力いただくことになります。


4.3.4 – 数値 for

for ステートメントには、数値 forジェネリック for という 2 つのバリアントがあります。

数値 for の構文は次のとおりです。

    for var=exp1,exp2,exp3 do
      something
    end
このループは、exp3var を増分するステップとして使用して、varexp1 から exp2 までの各値に対して something を実行します。この第三の式は省略可能であり、省略されると Lua はステップ値として 1 を想定します。次の例は、そのようなループの典型的な例です。
    for i=1,f(x) do print(i) end
    
    for i=10,1,-1 do print(i) end

for ループには、その優れた活用方法に関するいくつかの注意点があります。まず、すべての 3 つの式はループが開始する前に 1 回評価されます。たとえば、最初の例では f(x) は 1 回だけ呼び出されます。次に、制御変数は for ステートメントによって自動的に宣言されるローカル変数であり、ループ内でのみ参照できます。典型的な間違いとしては、ループが終了した後で依然としてこの変数が存在すると考えることが挙げられます。

    for i=1,10 do print(i) end
    max = i      -- probably wrong! `i' here is global
ループ後に制御変数の値が必要な場合 (通常、ループを break した場合) は、この値を別の変数に保存する必要があります。
    -- find a value in a list
    local found = nil
    for i=1,a.n do
      if a[i] == value then
        found = i      -- save value of `i'
        break
      end
    end
    print(found)
第三に、制御変数の値は変更しないでください。このような変更の結果は予測できません。for ループを正常に終了する前に break したい場合は、break を使用します。