Справочное руководство по языку Lua 5.1 :: 6 -



6 – Автономная Lua

Несмотря на то, что язык Lua был has разработан в качестве языка-расширения, для включения в программы-хозяева, написанные на C, он также зачастую используется как автономный язык. Интерпретатор Lua для автономного выполнения программ называется lua, и включен в стандартный пакет поставки. Автономный интерпретатор включает все стандартные библиотеки, в том числе библиотеку отладки.

Параметры запуска интерпретатора:


        lua [options] [script [args]]
       

Опции (options) могут быть следующими:

  • -e stat: выполняет строку stat;
  • -l mod: "требует" mod;
  • -i: переходит в интерактивный режим после запуска script;
  • -v: выводит информацию о версии;
  • --: останавливает обработку опций (примечание: похоже, что просто-напросто игнорирует остальные опции);
  • -: использует stdin вместо файла и останавливает обработку опция.

После обработки опций, lua выполняет заданный скрипт script, передавая ему аргументы args как строковые. При вызове без аргументов, lua работает аналогично «lua -v –i» когда стандартным поток ввода (stdin) – терминал, и как «lua» - в противном случае.

Перед обработкой аргументов, интепретатор проверяет, выставлена ли переменная окружения LUA_INIT. Если ее формат @filename, то lua запускает файл. В противном случае, lua выполняет команду, записанную в переменной.

Все опции обрабатываются в рпямом порядке, за исключением опции -i. Например, следующий вызов

       
        $ lua -e'a=1' -e 'print(a)' script.lua
          

Приведет к тому, что интерпретатор сначала изменит значение a на 1, затем выведет значение переменной a ('1'), и после этого запустит файл script.lua без аргументов. (В данном случае $ – приглашение командной строки (терминала). Ваше приглашение командной строки может отличаться.)

Перед началом выполнения скрипта, lua собирает все аргументы командной строки в глобальную таблицу arg. Имя скрипта сохранено по индексу 0, первый аргумент после имени скрипта – по индексу 1, и т.д. Все аргументы перед именем скрипта (т.е., имя интерпретатора и его опции) сохраняются с отрицательными индексами. Например, при вызовеl

          
       $ lua -la b.lua t1 t2
           

Интерпретатор сначала запускает файл a.lua, затем создает таблицу

           
     arg = { [-2] = 'lua', [-1] = '-la',

               [0] = 'b.lua',

               [1] = 't1', [2] = 't2' }
           

И, наконец, запускает файл b.lua. Скрипт вызывается с аргументами arg[1], arg[2], ···; он может также получить доступ к этим аргументам при помощи выражения обработки переменного количества аргументов (vararg expression) '...'.

В интерактивном режиме, если вы вводите неполное выражение, интерпретатор ожидает его завершения и предоставляет новое поле для ввода.

Если глобальная переменная _PROMPT содержит строку, то ее значение используется в качестве строки запроса. Аналогично, если глобальная переменная _PROMPT2 содержит строку, ее значение используется в качестве «вторичной» строки запроса (используемой при вводе неполных выражений). Поэтому, обе строки запроса могут быть изменены непосредственно из командной строки.

Пример:

           
        $ lua -e'_PROMPT='myprompt> '' -i
           

(внешняя пара кавычек необходима шеллу, внутренняя – Lua). Также строки запроса могут быть изменены в любой программе Lua присваиванием переменной _PROMPT. Обратите внимание на использование -i для перехода в интерактивный режим; в противном случае, программ закончит выполнение сразу после выполнения оператора присваивания переменной _PROMPT.

Для представления возможности использовать Lua в качестве интерпретатора скриптов в Unix системах, автономный интерпретаор пропускает первую строку chunk если он начинается с#. Т.о., скрипты Lua могут быть превращены в исполняемые программы вызовом chmod +x и добавлением #! в начало файла, как показано в следующем примере:

           
       #!/usr/local/bin/lua
           

(Конечно, местоположение интерапретатора Lua может изменяться. Т.о. если lua находится в каталоге, указанном в переменной окружения PATH, то

           
       #!/usr/bin/env lua
           

будет лучшим и более переносимым решением.)