Я мог бы воспроизвести проблему и в Lua 5.3.4.
Если вы читаете в Документах Lua, глава 4.2 - Локальные переменные и блоки , вы получитепредложение
Помните, что этот пример не будет работать должным образом, если вы введете его в интерактивном режиме. Вторая строка, local i = 1, сама по себе является полным чанком.
Это решает именно эту проблему. Таким образом, кажется, что интерпретатор Lua имеет ограниченную поддержку внешнего фрагмента (который явно присутствует в файле Lua). Но это поведение кажется мне приемлемым и понятным ввиду компактности языка и интерпретатора.
Итак, в интерактивном режиме
либо пропустите local
перед переменной i
, чтобы она заработала:
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
Lua>x=10
Lua>i=1
Lua>while i<=x do
...>local x=i*2
...>print(x)
...>i=i+1
...>end
или начало заключать все в блок:
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
Lua>do
...>local x=10
...>local i=1
...>while i<=x do
...>local x=i*2
...>print(x)
...>i=i+1
...>end
...>end
Оба варианта приведут к обычному (и ожидаемому) результату:
2
4
6
8
10
12
14
16
18
20