проблемы затенения метаметодов с помощью ключа luaL_ref - PullRequest
2 голосов
/ 01 января 2012

У меня есть пустая таблица, чьи метаметоды __newindex и __index реализованы на стороне C.Таблица будет использоваться в качестве массива (t [1] = 3, print (t [2]) ...), причем C перехватывает все обращения.

Теперь я хочу использовать luaL_ref, чтобы добавить ссылку на другой объект в эту таблицу, чтобы предотвратить выбрасывание второго из-за gc.Но я думаю, что возвращаемая ссылка может скрывать «виртуальные» индексы, которые я собираюсь использовать с этой таблицей:

Например, я ожидаю, что t [1] = 3 вызовет __newindex, но если lauL_refвернул 1, тогда моя таблица действительно имела бы элемент в '1', тогда __newindex больше не вызывался бы.

Я знаю, что luaL_ref гарантированно вернет ключ, еще не использованный в таблице, но так как таблица пуста (так что мои метаметоды всегда вызываются), я думаю, что на самом деле она может возвращать низкие значения, которые яЯ могу использовать.

Есть ли недостатки в этом рассуждении?Если нет, как я могу обойти это?

1 Ответ

1 голос
/ 01 января 2012

Я бы посоветовал вообще не использовать luaL_ref. По крайней мере, не на пустом столе вы ставите свой метатабель. Возможно, вам следует ссылаться на него в самой метатаблице или на другую внутреннюю таблицу, которую вы храните в реестре.

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