userdata и глубокие структуры

Когда мы расширяем lua при помощи C, мы используем userdata  — тип, который является куском C-данных, как правило структурой. Но что делать, если мы имеем дело со стуктурой, включающей в себя массив/иную структуру, с которыми надо работать? Читать далее

Немного о глобальных, локальных и нелокальных переменных (и окружениях)

Почти все работающиее с lua люди знают о глобальных и локальных переменных. Но всё равно я кратко их опишу. Глобальная переменная не требует определения, вообще-то все глоб. переменные можно найти в таблице _G  (она содержит сама себя). Т. е. правила обычные: по несуществующему индексу можно найти nil, можно задать метатаблицу, и всё такое. _G  является, как вы увидете, единственной общей переменной, и то не совсем. Читать далее

Gettext и lua: не подерёмся?

Итак, я вожусь над сайтом для загрузки пакетов (http://git.vallua.ru, сейчас не работает). А куда без локализации? Можно и велосипед изобрести, но зачем? Ведь есть gettext!

Итак, сегодня пойдёт речь о интеграции lua и gettext — системы перевода.

Коротко о gettext. Имеет форматы .pot, .po, .mo. Первый — шаблон переводов, второй — собственно переводы, третий — копилированый вариант, итог1)Файлы .pot и .po удаляются из релиза. Руководства по созданию .po файлов из исходников поищите в интернете.

Читать далее

Примечания   [ + ]

1. Файлы .pot и .po удаляются из релиза

Финализаторы необъектопривязаные

Ну, не пугайтесь заголовка! Нормально всё. Хм. Чем-то напоминает биологическое название вида, что почти правда.

Сначала введение: с помощью метатабличного метода __gc  можно задать функцию, которая будет вызвана при сборке мусора. Её и зовут финализатором. Пример: закрыть соединение при финализации сокета.

Читать далее

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

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

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

Читать далее