Lua
Этот раздел посвящен библиотеке для работы с Lua в 1С:Предприятие и OneScript. На данной странице описаны все действия, необходимые для полноценного начала работы
Пожалуйста, ознакомьтесь с разделом "О внешних компонентах" перед началом работы
Начало работы
Библиотека позволяет встраивать и выполнять скрипты Lua непосредственно в 1С:Предприятие и OneScript. Поддерживаются две версии Lua VM:
- Lua54 - стандартная версия Lua 5.4
- LuaJIT - Just-In-Time компилятор Lua для повышенной производительности
Для повторного использования одного контекста Lua (глобальные переменные, загруженные пакеты, объявленные функции) создайте экземпляр VM и передавайте его в последующие вызовы:
// Создание VM Lua 5.4
VM = OPI_Lua.СоздатьVM("Lua54");
// Создание VM LuaJIT
VM = OPI_Lua.СоздатьVM("LuaJIT");
// Выполнение кода из строки
КодLua = "return 2 + 2";
Результат = OPI_Lua.ВыполнитьКодИзСтроки(VM, КодLua);
// Выполнение кода из файла
Результат = OPI_Lua.ВыполнитьКодИзФайла(VM, "C:\Scripts\script.lua");
// Определение функции
КодLua = "
|function sum(a, b)
| return a + b
|end
|";
OPI_Lua.ВыполнитьКодИзСтроки(VM, КодLua);
// Вызов функции с параметрами
Параметры = Новый Массив;
Параметры.Добавить(5);
Параметры.Добавить(3);
Результат = OPI_Lua.ВызватьФункцию(VM, "sum", Параметры); // Вернет 8
Для одноразового вызова без сохранения состояния VM можно использовать ВызватьФункциюСкрипта:
Параметры = Новый Массив;
Параметры.Добавить(6);
Параметры.Добавить(7);
Результат = OPI_Lua.ВызватьФункциюСкрипта("Lua54"
, "function mul(a, b) return a * b end"
, "mul"
, Параметры);
Ошибки при выполнении Lua кода вызывают исключения в 1С. Рекомендуется использовать конструкцию Попытка...Исключение для обработки возможных ошибок
Работа с глобальными переменными
Библиотека позволяет устанавливать и получать глобальные переменные в контексте Lua:
// Установка глобальной переменной
OPI_Lua.УстановитьГлобальнуюПеременную(VM, "myvar", "Значение");
// Получение глобальной переменной
Значение = OPI_Lua.ПолучитьГлобальнуюПеременную(VM, "myvar");
Работа с пакетами
Присутствует возможность добавлять Lua модули как пакеты для повторного использования:
// Добавление пакета из строки
КодПакета = "
|local M = {}
|function M.hello(name)
| return 'Hello, ' .. name
|end
|return M
|";
OPI_Lua.ДобавитьПакетИзСтроки(VM, "mymodule", КодПакета);
// Добавление пакета из файла
OPI_Lua.ДобавитьПакетИзФайла(VM, "mymodule", "C:\Scripts\module.lua");
// Использование пакета
OPI_Lua.ВыполнитьКодИзСтроки(VM, "calc = require('mymodule')");
Параметры = Новый Массив;
Параметры.Добавить("World");
Результат = OPI_Lua.ВызватьФункцию(VM, "calc.hello", Параметры);
Работа с байт-кодом
Для повышения производительности код скрипта может быть предварительно скомпилирован в байт-код Lua:
// Компиляция кода в байт-код
КодLua = "return 2 + 2";
БайтКод = OPI_Lua.СкомпилироватьКодИзСтроки(VM, КодLua);
// Выполнение байт-кода
Результат = OPI_Lua.ВыполнитьБайтКод(VM, БайтКод);
// Компиляция из файла
БайтКод = OPI_Lua.СкомпилироватьКодИзФайла(VM, "C:\Scripts\script.lua");
Поддерживаемые типы данных
Для обмена между 1С и Lua разрешены следующие типы данных
- Примитивные типы: строка, число, булево, Неопределено
- Структуры и соответствия (как Lua-таблицы)
- Массивы (как Lua-таблицы)
- ДвоичныеДанные