1.1 - Chunks

Каждый участок кода, исполняемый Lua, будь то файл или строка в интерактивном режиме, есть chunk. Иначе говоря, chunk - это просто последовательность операций.

По желанию, каждая операция может завершаться точкой с запятой. Обычно я использую ";" только для разделения операций, записанных в одной строке, но это всего лишь дело привычки или необязательных соглашений. Перевод строки не играет роли в синтаксисе Lua; например, следующие четыре chunk'а правильны и эквивалентны между собой:

    a = 1
    b = a*2

    a = 1;
    b = a*2;

    a = 1 ; b = a*2

    a = 1   b = a*2    -- ужасно, но допустимо

Сhunk может быть простым, состоящим из единственнй операции , как в примере "hello world", а может состоять из набора операций и определений функций (что, как можно убедиться далее, особенно актуально), как в примере с расчетом факториала. Сhunk может быть таким большим, как вы пожелаете. Поскольку Lua используется также как язык описания данных, chunk'и размером в несколько мегабайт не являются исключением. Интерпретатор Lua не испытывает проблем с обработкой больших объемов кода.

Вместо записи вашей программы в файл вы можете запустить автономный интерпретатор в интерактивном режиме. Если вы запустите Lua без аргументов, то увидите приглашение:

    Lua 5.0  Copyright (C) 1994-2003 Tecgraf, PUC-Rio    >
Соответственно, каждая набранная вами команда (подобная print "Hello World") выполняется сразу после нажатия <enter>. Для выхода из интерактивного режима и интерпретатора в целом, просто наберите end-of-file (ctrl-D в Unix, ctrl-Z в DOS/Windows), или вызовите функцию exit из состава системной библиотеки Lua (для чего наберите в командной строке os.exit()<enter>).

В интерактивном режиме Lua обычно интерпретирует каждую набранную строку как полный (завершенный) chunk. Однако, если интерпретатор определит, что строка не может ззавершать chunk, он будет ждать дальнейшего ввода до тех пор, пока не получит завершенный chunk. Когда Lua ожидает продолжения строки, он показывает различные приглашения (обычно это >>). Соответственно, вы можете ввводить многострочные определения, подобные функции factorial, непосредственно в интерактивном режиме. Иногда, однако,удобнее помещать такие определения в файл и затем использовать Lua для запуска этого файла.

Вы можете выполнять последовательность chunk'ов, передав их как аргументы автономному интерпретатору с ключом -l. Например, у вас есть файл a с единственным выражением x=1 и файл b с операцией print(x), команда

    prompt> lua -la -lb
запустит chunk в a, затем в b, который выведет ожидаемую единицу. (Ключ -l в действительности вызывает require, которая просматривает (ищет) файлы по заданному пути. Так, предыдущий пример не будет работать, если этот путь не включает в себя текущий каталог (директорию). Более подробно о функции require вы можете узнать в Разделе 8.1.)

Вы можете использовать ключ -i для указания Lua перейти в интерактивный режим после исполнения chunk'ов. Команда вида

    prompt> lua -i -la -lb
запускает chunk в a, затем в b, после чего переводит интерпретатор в интерактивный режим. Этот способ особенно актуален при отладке и тестировании. В конце данной главы мы рассмотрим другие опции автономного интерпретатора.

Другой способ связи chunk'ов состоит в использовании функции dofile , которая немедленно исполняет файл. Например, вы создали файл lib1.lua:

    -- file 'lib1.lua'

    function norm (x, y)
      local n2 = x^2 + y^2
      return math.sqrt(n2)
    end

    function twice (x)
      return 2*x
    end
Теперь, в интерактивном режиме, вы набираете
    > dofile("lib1.lua")   -- загрузка вашей библиотеки
    > n = norm(3.4, 1.0)
    > print(twice(n))      --> 7.0880180586677

Функцию dofile также удобно использовать для тестирования отдельных участков кода. Вы можете открыть одновременно два окна: текстовый редактор с открытым в нем текстом вашей программы (файл prog.lua, к примеру) и консоль Lua в интерактивном режиме. Сохранив изменения в программе, вы вызываете dofile("prog.lua") в консоли Lua для загрузки обновленного кода; затем вы можете выполнить обновленный код, вызывая его функции и выводя на экран результаты.


Hosted by uCoz