Язык Lua
Contents
Lua
Что Такое Lua?
Lua является чрезвычайно быстрым, простым и мощным скриптовым языком, разработанным, реализованным и поддерживаемым PUC-Rio в Бразилии. Сильные стороны Lua были доказаны использованием Lua во многих критичных по времени приложениях, в том числе стратегиях реального времени, таких, как World of Warcraft. В настоящее время Lua входит в 20 самых популярных языков программирования в мире.
Официальный веб-сайт Lua: http://www.lua.org
Как Выглядит Lua ?
Синтаксис
С точки зрения синтаксиса Lua находится близко от семьи языков программирования Паскаль (Паскаль, ADA, Delphi). Нет синтаксического сахара, например, префикс/постфиксных операторов или присвоения значения внутри выражения, как в C++.
Сравните функцию факториала в C++, Pascal и Lua.
C++:
int fact(int value)
{
if (value == 0)
return 1;
else
return fact(value - 1) * value;
}
Pascal:
function fact(n: integer): longint;
begin
if (n = 0) then
fact := 1
else
fact := n * fact(n - 1);
end;
Lua:
function fact(n)
if n == 0 then
return 1;
else
return fact(n - 1) * n;
end
end
Концепции
С точки зрения концепции программирования ближайший к Lua язык - это JavaScript:
- Lua имеет не типов переменных. Переменная может принимать любое значение.
- Lua не требуется явное объявление переменных. Если переменной не присвоено значение, она будет иметь значение
nil
. - Интерфейс классов Lua (известный как таблицы) создается динамически путем присвоения ссылки на функцию.
Таблицы
Концепция таблиц - наиболее сложная для новичков Lua. Таблицы - это всё в Lua: это классы, хеш-таблицы (словари) и даже массивы.
Таблица как хеш-таблица.
Можно хранить и затем извлечь значение внутри таблицы с помощью любого ключа:
-- create a table
a = {};
-- put value 123 into the table with key "onetwothree"
a["onetwothree"] = 123;
-- retrieve the value by the key
print(a["onetwothree"]);
Если ключ является строкой, можно использовать оператор точка (.
) для присвоения или извлечения значения.
Пример ниже выполняет точно то же самое, что и предыдущий пример:
-- create a table
a = {};
-- put value 123 into the table with key "onetwothree"
a.onetwothree = 123;
-- retrieve the value by the key
print(a.onetwothree);
Вы также можете смешивать синтаксис. Например, этот код тоже правильный и делает то же самое:
-- create a table
a = {};
-- put value 123 into the table with key "onetwothree"
a.onetwothree = 123;
-- retrieve the value by the key
print(a["onetwothree"]);
Таблица как массив.
Если вы используете целое число как ключ, и значения будут присвоены, начиная с ключа 1, последовательно, по порядку без пробелов, то Lua (и LuaJIT) оптимизатор узнаёт эту часть значений как массив. В этом случае используется метод альтернативного (и действительно более быстрого) доступа:
local array, i;
-- create a table
array = {};
-- fill the table
for i = 1, 10, 1 do
array[i] = i * 20;
end
-- now keys 1 to 10 are stored as an array
-- but we are still able to add additional properties to the dictionary part of the table
array.first_item = 1;
array.last_item = 10;
-- this (access to the array part)...
b = a[5];
-- ...is faster than this (access to the dictionary part)
c = a.first_item;
Таблицы как класс
Ссылка на функцию может также храниться в таблице.
-- create a table
math = {};
-- create an inline function and store the reference into the table
math.abs = function (x)
if x < 0 then
return -x;
else
return x;
end;
end
...
b = math.abs(-10);
Выглядит точно так же, как статический метод класса, не так ли? А что если мы хотим создать методы объекта? Методы объекта должны получить ссылку в таблице, не так ли? Давайте посмотрим.
-- create a table
mytable = {};
-- create a property
mytable.x = 0;
-- create a method
mytable.inc = function (_this)
_this.x = _this.x + 1;
end
Теперь мы можем использовать так:
mytable.inc(mytable);
Однако другие языки (за исключением простого C) не требуют явной передачи ссылки! Почему Lua это делает? Ну, для такого случая Lua имеет «синтаксис сахара», двоеточие (:
), так что показанный выше вызов может быть написан так:
mytable:inc();
Где Находится Документация?
- Стандартная документация Lua включена в онлайн и офлайн версии документации Indicore SDK.
- Можно всегда обратиться на официальный веб-сайт Lua: http://www.lua.org.
Какая Версия Lua Используется?
Indicore использует спецификацию Lua 5.1.4 и реализацию виртуальной машины LuaJIT 2.0.
Совместим ли Indicore с Расширениями Lua Сторонних Разработчиков?
Да. Однако, как указывалось выше, мы используем LuaJIT 2.0 вместо той первоначальной виртуальной машины Lua, которая буквально является API/ABI совместимой с исходной реализацией Lua VM за исключением способности сохранять или загружать Lua байт код. LuaJIT 2.0 имеет свой собственный компилятор, который не совместим с первоначальной VM Lua.
Так что просто проверьте, совместимо ли расширение с LuaJIT.
Эта Статья на Других Языках
Language: | English • español • français • русский • 中文 • 中文(繁體) |
---|