ПредишенСледващото

Lua е бърз и legkovstravaemy скриптов език за програмиране. Той съчетава прост синтаксис процесуално с гъвкави конструкции описание данни въз основа на асоциативни масиви и разширяеми семантика. Lua е динамично написали и тълкува. Преводачът превежда изходния код в байт код за регистрация на виртуална машина, и е с отворен код, софтуер с отворен код в C език. стандарт Lua разпределението на виртуалната машина памет се използва с събиране на боклука (подобно на Java или .NET).

История на създаване

Lua 1.0 е проектиран така, че за предмет конструктори включени SOL синтаксис (оттук и името Lua: португалски Сол - «Слънце», Lua - «Луна"). Контрол Lua конструкти бяха взети от Modula (ако, докато, повторете /, докато), CLU (успоредно задача, множествено връщане стойност на функцията като опростена алтернатива, вместо предаване на връзката или изрични указатели параметри), C ++, SNOBOL и AWK (асоциативни масиви).

Lua версия до 5.0 произведен по лиценз, BSD като лиценз. От версия 5.0 и по-Луа се разпространява под лиценза на MIT. И двете лицензии са толерантни и почти идентични.

инструменти

Независим преводач (наричан също lua.c име на файла източник, или просто да Луа изпълнимия файл) е малка програма, която позволява директно използване Lua. Когато преводачът зарежда файла, то игнорира първия ред, ако тя започва с ( "#"), "знак". Тази функция позволява използването на Lua е скрипт, преводач в Unix-базирани системи. Ако се предшества от код низ от формата

(При условие, че автономна интерпретатора намира в / ЮЕсАр / местни / BIN), или

можете да се обадите (изпълнение) на програмата директно, без да е необходимо да стартирате Lua интерпретатора.

Всички параметри са задължителни. Както видяхме, когато тичам, без аргументи Луа преводач в интерактивен режим. -Д ключ може директно да въведете код в командния ред.

(В Unix, трябва да укажете двойни кавички в отделни обвивката команди от действителната изпълним код.) Както бе споменато по-горе, -l превключвател изтегля файл и да конвертира -i интерпретатора в интерактивен режим след лечение с други клавиши (Опции). Така например, на призива

a.lua зареди файла и изпълнява задачата х = 10, и на последно място, да дадат на командния ред, за да влезете.

разширение Scripting език маркирани .lua. За задачи, време-критично, тя е JIT компилатор-Луа - LuaJIT. съставител llvm-Луа също е предназначен за генериране на код за виртуалната машина LLVM, осигуряваща възможност за последващи действия за съставяне по много ефективен код машина за различна архитектура процесор.

основни принципи

лексикални конвенции

Имена (идентификатори) в Lua може да бъде всеки низ от букви, цифри и долна черта, а не започва с цифра. Със следните ключови думи са запазени и не могат да бъдат използвани в имена:

Lua е с малки букви език: и - ключовата дума, докато И AND- и две различни валиден документ за самоличност. По конвенция, имената започват с долна черта и записани с главна буква (например _VERSION), запазен за вътрешно ползване, като глобални променливи, използвани Lua. Буквални струни трябва да бъдат затворени в единични или двойни кавички и могат да съдържат C-като бягство-poledovatelnosti.

Видове и променливи

В Lua осем основни типа: няма данни (неопределена), булеви (логично), номер (с цифри), стринг (низ), функция (функция), UserData (потребителски данни), конци (конци) и маса (маса).

  1. Nil - нулева стойност е типа [нула]. Основната му функция - различна от всички други, представляват липсата на подходяща стойност.
  2. По тип булеви стойности са фалшиви (фалшиви) и истинските (истината). Стойностите на нула и невярно се считат за неверни, друга стойност се смята за вярно. По тип Number са реални числа (двойна точност с плаваща запетая).
  3. String представлява масиви от символи. Lua струни могат да съдържат никакви 8 битови символи, включително и нула ( '\ 0').
  4. Въведете UserData (потребителски данни) за съхранение на данни от всяко C в Lua променливи. Стойности от този тип е препратка към физически блок памет и има предварително определени операции в Lua, освен присвояване и проверка за равенство. Въпреки това, като се използва metatables, програмист може да определи операции на стойности от този тип.
  5. резба (поток) тип представлява независим резба на изпълнение, и се използва при прилагането coroutine механизъм. Не може да бъде идентифициран Lua нишки с операционната система нишки. Lua подкрепя съчетания дори в тези системи, при които не се поддържат потока на ниво операционна система.
  6. тип таблица (Таблица) определя асоциативни масиви. Тези масиви могат да бъдат индексирани не само цифри, но и всяка стойност (с изключение на нула). Таблицата може да съдържа стойности на няколко типа (с изключение на нула). Маси представляват единственият механизъм за структуриране на данни в Lua; те могат да бъдат използвани като прости масиви, символни таблици, набори, звукозаписни полета, дървета и така нататък. Да представлява речници Lua използва името на полето като индекс в таблицата. Представяне както на а.Име на представяне идентичност счита за [ "име"]. Тъй като функциите са вградени ценности тип, таблицата може да съдържа полета и функции. Така, таблицата може да съхранява методи методи.

Променливи от тип маса, функция, резба и UserData себе си не съдържа данни, те се съхраняват само чрез позоваване на съответния обект.

В Lua, има три вида променливи: глобални. местните таблици и полета. Всяка променлива се счита за световен ако не е предварително обявена местна. Местните променливи съществуват в лексикален обхват: локални променливи наличните функции, определени в рамките на този контекст.

В Lua поддържа обикновено стандартен набор от оператори, почти като в Pascal или С Състои се от операторите на присвояване, поток оператори контрол изпълнение, функционалните повиквания и променливи декларации.

Това са основните стъпки:

В сравнение с равенство не е извършено преобразуване на типовете. Обекти на различни видове винаги се смятат за различни. При изчисляване на стойността на късото съединение се използва - вторият аргумент се оценява само ако е необходимо. Той работи в следната таблица на приоритети и асоциативност на операторите:

В Lua съществува специална функция, с която стартира програмата. последователно преводач изпълнява изявленията, които получава от файл или от програмата за управление. Така че е по-рано компилира програмата в двоично представяне, което също може да се съхранява.

Всеки блок от код се изпълнява като анонимен функция, така че е възможно да се дефинират локални променливи, както и от него можете да върне стойност.

Операторите могат (но не задължително) са разделени от ";".

По-долу са основните оператори:

не блокират. край превръща последователността на отчети в една декларация, и се отваря нов обхват, в който можете да определите локални променливи.

В случай изявлението. а и да се повтаря всички стойности на изразите, които са различни от нула невярна и се третират като истина. Операторът не може да се върне стойностите са се върнали се състоят или съдържат един или повече изрази (списък). и оператори почивка за връщане трябва да са последният оператор в блока (т.е., трябва или да бъде последният оператор в код блок, или непосредствено преди думите свършват. друго. ElseIf. до).

за изречение е за всички стойности на променливата цикъл от началната стойност и завършва с приключване на стойност включително. Третата стойност, ако е посочено, се използва като промяна в променливата на цикъла. Всички тези ценности трябва да бъде числено. Те се оценяват само веднъж, преди да изпълни цикъла. променливата на цикъла е местно към веригата и не е достъпна извън тялото му. Стойността на променливата цикъл не може да бъде променен в рамките на тялото на цикъла. Тук е кодът на псевдо демонстрира изпълнението на за изявление.

Определяне на функция - това е изпълним експресия (конструктор функция), която оценява към обект е типът на функция:

В скоби е поставен списък (възможно е празен) на аргументи на функция. Списък на аргументи на функция може да сложи край на три точки - в този случай, функцията има променлив брой аргументи. Между затварящата скоба и в края на оператор се поставя функциите на тялото.

По време на изпълнението на функцията конструктор също е изградена верига - една маса на всички налични функции и външни за местните променливи. Ако една функция се предава като обратна стойност, той запазва достъп до всички променливи в неговото закриване. Всеки път, конструктор функция изгражда нов закриване.

Извикването на функция се състои от препратка към функцията, и затворен в скоби списък аргумент (вероятно празен). Позоваване на функцията може да бъде всеки израз, който се изчислява на функция. Между позоваване на функцията и отваряща скоба не може да бъде нов ред.

Ако функцията приема единствен аргумент и го третира като таблица, чиито елементи са индексирани имената на формалните параметри на функцията, в този случай поканата се прилага на практика механизъм, наречен аргументи:

Мета-маси

Всяка таблица и UserData тип обект може да има мета-маса - редовен маса, полета, които определят поведението на обекта източник, когато се прилага към него някои специални операции. Например, когато обектът е в допълнение операнда, интерпретатора претърсва областта на мета-маса на име __add и ако тази област е налице, след това използва своята стойност като функция да изпълнява допълнение. Индекси (имена на полета) в мета таблицата наречените събития, както и съответните стойности (манипулатори на събития) - metamethods.

По подразбиране, новосъздадено маса не разполага с мета-маса. Всяка таблица т може да се направи т таблицата мета-масата. setmetatable функция разговори (т, т). getmetatable функция (т) връща мета-маса Т или нулева маса. ако масата не разполага с мета-маса.

Lua определя от следните събития:

Примери за използването на мета-маси

В следващия пример, мета-маса се използва за определяне на стойностите по подразбиране за липсващите елементи на таблицата:

Тук е нетривиален решение, което не използва отделен мета-маси за всяка стойност по подразбиране:

Мета-метод __index този мета-маса подслушани разговори към празните полета на таблицата и връща стойността, съхранена в самата таблица на ключов индекс.

Пакети - основният начин да се определи набор от свързани функции, които не замърсяват глобалния обхват. Обикновено опаковката е един файл, който е в глобалния обхват определя една таблица, която съдържа всички характеристики на този пакет:

Можете да направите всички функции на местната и освен образуване на масата на изнесените функции:

Пакетът се зарежда с изискват (функция). и по време на зареждане на името предава на функцията (не може да съдържа разширяване, която се добавя автоматично) е достъпно чрез променлива _REQUIREDNAME.

Класове и обекти

Тук класа функция създава една празна маса, приготвена за да стане обект мета-масата. методи клас са области на тази таблица т.е. клас е таблица, която съдържа и двата метода на даден обект и мета-методи.

обект () функция създава обект на даден клас - таблица, която като мета-маса набор даден клас. Вторият аргумент може да се прехвърля в таблица, съдържаща поле инициализира обект.

стандартни библиотеки

Стандартна Lua bibltoteki съдържа често използвани функции, които се извършват директно в API С. Някои от тези функции осигуряват важни езикови услуги (например, тип и getmetatable); други предоставят достъп до "извън" услуги (например, I / O); те частично приложена в Lua, но се използват често и да имат критично изпълнение изпълнява в С (например, вид).

Всички библиотеки в които действат чрез официалния C API и работят като отделни C модули. В момента, Lua е със следните стандартни библиотеки:

  • основната библиотека (основна библиотека);
  • библиотека пакет (пакет библиотека);
  • работа низ (низове);
  • работа с таблици (манипулация маса);
  • математически функции (грях, влезте, и т.н.);
  • вход / изход;
  • Работа с операционната система (операционна система съоръжения);
  • отстраняване на грешки (дебъгване съоръжения).

Всяка библиотека, с изключение на основата и библиотека пакет, представляващ всички функции като глобален полета маса или методи на обекти.

Позоваването

Свързани статии

Подкрепете проекта - споделете линка, благодаря!