Вызвать строку как функцию

Периодически бывает надо вызвать строку как функцию. Например:

Как правило, это приведёт к ошибке. Что вполне логично. Однако, не всегда удобно.

Немного повозившись, сделал такой код:

Как правило, библиотека strings подключена, и для всех строк задана метатаблица типа {__index = string} . Данный код добавляет к ней поле __call, которое получает строку и аргументы при попытке вызова. Потом, строка компилируется и выполняется.

Примечание: также используется слабая таблица для кэширования кода. Для работы кода он должен быть помещён в отдельный файл и загружен при помощи require .

Добавить комментарий