Можно ли добавить метаметод в таблицу в Lua из C? - PullRequest
1 голос
/ 07 мая 2020

У меня есть этот массив строк в C, который я могу передать в Lua. На стороне Lua я затем вызываю table.insert, чтобы добавить к нему элементы. Но затем мне нужно снова вернуть эту таблицу на стороне C.

Я знаю, что могу предоставить функцию C функции Lua для этого. Но я не хочу, чтобы программист не забывал об этом.

Вместо этого мне интересно, есть ли способ добавить метаметод (например, __newindex) в таблицу, чтобы я мог «видеть», когда элементы добавляются в таблицу Lua и захватывать их автоматически на стороне C?

1 Ответ

0 голосов
/ 07 мая 2020

Вы делаете копию массива C, когда вам действительно нужен прямой доступ к исходному массиву. Этот массив строк следует хранить только в C или только в Lua, а затем сделать видимым для другой стороны.

Чтобы сохранить его в C, создайте userdata который указывает на массив и имеет метатаблицу, __ index которой является функцией C, которая позволяет Lua обращаться к ней и управлять ею. Вы можете либо сохранить данные пользователя как глобальные, либо Lua вызвать функцию, которая их создает.

Чтобы сохранить их как таблицу Lua, просто сделайте ее таблицей и получите к ней доступ с помощью lua_getglobal и lua_setglobal .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...