Характеристика
Выложил для ознакомления с языком.Материал из Википедии
Lua общ описано как «multi-парадигма» язык, обеспечивая малый комплект вообще характеристик которые можно удлинить для приспособления по-разному типов проблемы, rather than обеспечивая более сложную и более твердую спецификацию для того чтобы сопрягать одиночную парадигму. Lua, for instance, не содержит точную поддержку для унаследование, но позволяет его быть снабженным относительно легко с metatables. Подобно, Lua позволяет программники снабдить namespaces, типы, и другие родственные характеристики использующ свою одиночную вставку таблицы; первые функции типа позвольте занятость много мощных методов от функциональный программировать; и полное словарное scoping позволяет тонкозернистое прятать информации принудить принцип наименьшей привилегированности.
In general, Lua стремится обеспечить гибкие meta-характеристики можно удлинить как необходимо, rather than поставляется характеристик-установило специфический до одна программируя парадигма. В результате, низкопробный язык свет - в факте, полной справке переводчик только о составленном 150kB и легко adaptable к обширному диапозону применения.
Lua будет dynamically напечатанным на машинке языком предназначенным для пользы как выдвижение или scripting язык, и будет компактно достаточно для приспособления на разнообразие платформ хозяина. Оно поддерживает только немного атомных структур данных such as булевско значения, номера (double-precision floating point невыполнением обязательства), и шнуры. Типичные структуры данных such as блоки, комплекты, хэш - таблицы, списки, и показатели смогите быть представлено использующ структуру данным по Lua одиночную родную, таблицу, которая необходимо несродным карта.
Lua не имеет никакую built-in поддержку для namespaces и object-oriented программировать. Вместо, metatable и metamethods используйте для того чтобы расширить язык для того чтобы поддержать обе программируя парадигмы в шикарном и прямодушном образе.
Lua снабжает малый комплект предварительных характеристик such as первосортные функции, собрание отброса, закрытие, правильно звоноки кабеля, принуждение (автоматическое преобразование между шнуром и значениями номера на продолжительности времени), coroutines (кооперативный multitasking) и динамическая нагрузка модуля.
Путем вклюать только минимальный комплект типов данных, Lua пытает поразить баланс между силой и размером.
Кодий примера
Классика здравствуйте! программа мира смогите быть написано следующим образом:
печать «Здравствуйте!, мир!»
факториально пример a рекурсивно функция:
функция факториально(n)
если == n 0 после этого
возвращение 1
конец
возвращение n * факториальный(n - 1) -- Комментарий в Lua начинает с двойн-дефисом
конец -- и бега к концу линии
печать([[множественные
линии]]) --[[По возможности написать в множественных линиях если
оно использовало с following двойными квадратными скобками]], то
Обработка Lua функций как сперва классифицирует перемеююые показана в following примере, где поведение функции печати доработано:
сделайте
местно oldprint = печать -- Храньте в настоящее время функция печати как старая печать
печать = функция(s) -- Redefine функция печати
если == s «foo» после этого
oldprint(«адвокатское сословие»)
еще
oldprint(s)
конец
конец
конец
VSе звоноки будущего к `печать' теперь направит через новую функцию, и спасибо Lua словарный scoping, старая функция печати только будет доступна новой, доработанной печатью.
Lua поддержки также закрытие, как продемонстрировано ниже:
функция makeaddfunc(x)
-- Возвратите новую функцию добавляет x к аргументу
возвращение функция(y)
-- Когда мы refer to переменный x, который вне течения
-- объем и продолжительность жизни скороее чем продолжительност жизнииз этого подметного
-- функция, Lua создает закрытие.
возвращение x + y
конец
конец
plustwo = makeaddfunc(2)
печать(plustwo(5)) -- Печати 7
Новое закрытие для перемеююого x создает every time makeaddfunc вызывает, так НОП подметная возвращенная функция всегда будет достигать своих x параметр. Закрытие управляется сборником отброса Lua's, как раз как любой другой предмет.
Раздвижной семантикой будет ключевая характеристика Lua, и «metatable» принципиальная схема позволяет таблицы Lua быть customized в мощных и уникально дорогах. Following пример демонстрирует «инфинитную» таблицу. Для любых n, fibs [n] передаст nth Номер Fibonacci использование динамический программировать и memoization.
PHP код:
fibs = { 1, 1 } -- Первоначально значения для fibs [1] и fibs [2].
setmetatable(fibs, { -- Дайте fibs некоторое волшебное поведение.
__index = функция(имя, n) -- Вызовите эту функцию если fibs [n] не существуют.
имя[n] = имя[n - 1] + имя[n - 2] -- Высчитайте и запомните fibs [n].
возвращение имя[n]
конец
})