- , fibs[n] даст
- lua.org (англ.) ... Lua (лу́а, с порт. — «луна») — скриптовый язык программирования, разработанный в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си.
- ЛексикаПравить
- примеры кода
Классическая программа «Hello, world!» на Lua выглядит так:
print("Hello World!")
Факториал — пример рекурсивной функции:
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
for i = 1,5 do
-- Statements
end
Работа с функциями как с объектами первого класса демонстрируется в следующем примере, в котором модифицируется поведение функции print:
do
local oldprint = print -- Сохраняем текущую функцию print как oldprint
function print(s) -- Переопределяем функцию print
if s == "foo" then
oldprint("bar")
else
oldprint(s)
end
end
end
Любой будущий вызов print теперь будет перенаправлен к новой функции, и благодаря поддержке в Lua лексического контекста, старая функция print будет доступна только посредством новой, модифицированной функции print. Lua также поддерживает замыкания, как описано выше, в соответствующем разделе.
- Ключевой особенностью Lua является расширяемая семантика, механизм метатаблиц даёт большие возможности по настройке уникального поведения для таблиц Lua. В следующем примере демонстрируется «бесконечная» таблица. Для любого
, fibs[n] даст
-е число Фибоначчи с использованием мемоизации.
fibs = { 1, 1 } -- Первоначальные значения для fibs[1] и fibs[2].
setmetatable(fibs, {
__index = function(name, n) -- Вызов функции, если fibs[n] не существует.
name[n] = name[n - 1] + name[n - 2] -- Расчёт и мемоизация fibs[n].
return name[n]
end
})
lua.org (англ.) ... Lua (лу́а, с порт. — «луна») — скриптовый язык программирования, разработанный в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си.
- Синтаксис Lua в основном построен на основе поздних паскалеподобных языков, таких как Модула-2 или Оберон. Формат записи текста — свободный, команды в тексте программы разделяются любыми пробельными символами. Допускается, но не является обязательным применение точки с запятой для разделения операций.
В одном из интервью Роберту Иерузалимски заметил, что синтаксис Lua — это компромиссное решение, которое он был вынужден принять, чтобы упростить освоение языка непрофессиональными программистами. Он охарактеризовал этот синтаксис как «довольно многословный», отметив, что лично для себя предпочёл бы более краткую нотацию[11].
ЛексикаПравить
Основной алфавит языка — английский, в строковых литералах допускается использование символов других языков. Идентификаторы могут состоять из букв, цифр и знака подчёркивания, но не могут начинаться с цифры или совпадать с одним из ключевых слов. Руководство по языку не рекомендует использовать идентификаторы, начинающиеся с подчёркивания, так как такие идентификаторы используются для системных целей.
Язык регистро-зависимый, все ключевые слова пишутся в нижнем регистре, идентификаторы, отличающиеся только регистром букв, считаются различными. Следующие 22 ключевых слова не могут быть использованы для имён[15]:
and break do else elseif
end false goto for function
if in local nil not
or repeat return then true
until while
КомментарииПравить
Для комментариев используется следующий синтаксис, близкий к языкам Ada, SQL и VHDL:
-- Простой однострочный комментарий в Lua начинается с двойного минуса и продолжается до конца строки.
dim = { "one", "two", "three" } -- Строчный комментарий не обязан начинаться с начала строки,
-- он может следовать за другими языковыми конструкциями,
-- поясняя их.
--[[Многострочный комментарий начинается с идущих подряд за двумя минусами двух открывающихся квадратных скобок
и продолжается до двух подряд закрывающихся квадратных скобок. Как здесь: ]]
-- Интересный эффект можно получить сочетанием строчных и многострочных комментариев:
--[[ Чтобы раскомментировать код ниже, достаточно добавить в этой строке пробел между минусами и скобками.
for i=1,#dim do
print(dim[i])
end
-- Если выше между минусами и скобками будет добавлен пробел, то
--]] -- здесь конец многострочного комментария превратится в обычный строчный
Типы данныхПравить
Lua представляет собой язык с неявным динамическим определением типов данных. Переменная языка может содерж#dim начения любого типа. Все значения в Lua могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.
В Lua восемь основных типов:
- nil (неопределенный)
- boolean (логический)
- number (числовой)
- string (строковый)
- function (функция)
- userdata (пользовательские данные)
- thread (поток)
- table (таблица)
nil — это тип значения nil [пустое значение], главное свойство которого — отличаться от всех остальных значений и обозначать отсутствие пригодного значения.
К типу boolean относятся значения false (ложь) и true (истина).
К типу number относятся обычно вещественные числа (double). В первых версиях Lua целые числа не выделялись в отдельный тип; такое решение мотивируется тем, что вещественное представление позволяет точно представить достаточно широкий диапазон целых чисел. Начиная с версии 5.3 добавлена возможность явного определения целого или вещественного формата числа. Внутреннее представление чисел можно изменить при сборке интерпретатора.
Тип string обозначает массивы символов. Строки Lua могут содержать любые 8-битные символы, включая ноль ('\0'). Строки неизменяемы. Строковые литералы могут записываться в одинарных или двойных кавычках, служебные символы помещаются в них в стандартной для C нотации с ведущим обратным слэшем. Многострочные литералы ограничиваются двумя подряд открывающимися и двумя подряд закрывающимися квадратными скобками.
Встроенная в язык поддержка Юникода отсутствует, хотя допускается использование символов UTF-8 в строковых литералах, а сама система представления UTF-8 позволяет вводить, выводить и частично обрабатывать строки в этой кодировке стандартными системными средствами. В последние версии Lua входит библиотека utf8, обеспечивающая более развитую поддержку UTF-8, существуют также библиотеки сторонних разработчиков, предоставляющие средства работы с Юникод-строками в различных кодировках.
Функции в Lua являются полноправными объектами, допускающими присваивание, передачу в функцию в параметре и возврат из функции как одного из значений. Тип thread имеют сопрограммы, тип userdataпредназначен для представления внешних данных, полученных или предоставляемых из/в код на другом языке (главным образом, на C/C++).