Как обрабатывать неизвестные функции инициализатора в lua? - PullRequest
3 голосов
/ 28 апреля 2010

Я хочу загрузить данные, записанные в варианте lua (eyeonScript). Тем не менее, данные изобилуют ссылками на функции инициализации, которые не находятся в простой форме:

Redden = BrightnessContrast {
    Inputs = {
        Red = Input {
            Value = 0,
        },
    },
}

Стандартный lua дает ошибки «попытка вызвать нулевое значение» или «неожиданный символ». Есть ли способ поймать их и передать какой-то общий инициализатор?

Я хочу получить структуру данных вложенных таблиц.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 28 апреля 2010

Установите метаметод __index для таблицы глобалов. Например, так что неопределенные функции ведут себя как идентичность:

setmetatable(_G,{__index=function (n)
                           return function (x) return x end
                         end})
2 голосов
/ 29 апреля 2010

Вот еще одна хитрость: установите __call для nil, но вам нужно сделать это в C или с помощью библиотеки отладки. Преимущество этого трюка в том, что он обрабатывает только вызовы неопределенных функций:

debug.setmetatable(nil,{__call=function (x,v) return v end})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...