Чем отличаются синтаксические правила Lua для REPL и скриптов?

Я редко использую Lua, так что это может показаться тривиальным вопросом, но я только что заметил, что с Lua 5.3.2 в интерактивном REPL я могу написать, например:

> 1 == 2 or error('numbers not equal')

Именно так я бы выполнял обработку ошибок в Bash или Perl (или, конечно, оператор слева от or был бы чем-то более полезным в реальном коде, например, двумя переменными).

Но если я вставлю 1 == 2 or error('numbers not equal') в какой-нибудь файл foo.lua, а затем выполню lua foo.lua, получится lua: foo.lua:1: unexpected symbol near '1'.

Я могу согласиться с тем, что это недопустимый синтаксис, но я нахожу очень странным, что REPL, тем не менее, принимает это утверждение. Может кто-нибудь объяснить, что здесь происходит? Существуют ли какие-то общие правила относительно того, что я могу делать в REPL, чего я не могу делать в скрипте?


person Peter    schedule 06.04.2019    source источник


Ответы (1)


Lua REPL пытается оценить ввод как выражения. (*) Если это удается, он печатает результаты. Это только для удобства.

(*) Он делает это, добавляя return к входным данным и пытаясь запустить это как скрипт.

person lhf    schedule 06.04.2019
comment
Окей, это имеет смысл. Спасибо. - person Peter; 06.04.2019