Вопрос

Возможно ли, чтобы часть пользовательских данных Lua содержала ссылку на объект Lua?(Например, таблица или другой фрагмент пользовательских данных?).В общем, что я хочу знать:

Могу ли я создать часть пользовательских данных таким образом, чтобы при запуске gc пользовательские данные могли сказать:"Привет!У меня есть ссылки на эти другие объекты, отметьте их тоже».

РЕДАКТИРОВАТЬ:отвечая на ЛХФ:

Предположим, у меня есть:

struct Vertex {
  double x, y, z;
}

struct Quaternion {
  double w, x, y, z;
}

Теперь я могу сделать:

struct Foo {
  Vertex v;
  Quaternion q;
}

но предположим, что вместо этого я хочу:

struct Bar {
  Vertex *v;
  Quaternion *q;
}

[т.е.предположим, что Vertex и Quaternion — это действительно большие фрагменты пользовательских данных].

Теперь предположим, что у меня есть пользовательская функция Lua, которая принимает вершину пользовательских данных и кватернион пользовательских данных и создает панель пользовательских данных (мне не нужен Foo пользовательских данных, так как я хочу сэкономить место) - тогда мне нужно как-то для пользовательские данные Vertex*/Quaternion* не подлежат сборке.

Это было полезно?

Решение

Возможно ли, чтобы часть пользовательских данных Lua содержала ссылку на объект Lua?

Нет. Пользовательские данные не могут содержать указатель на другой объект Lua.Если вы хотите использовать пользовательские данные для поддержания активности другого объекта Lua, вам придется сделать это, используя слабые таблицы.Книга Роберто как раздел о том, как это сделать.

Другие советы

Давненько я ничего не делал с lua.Я думаю, что если указанные данные были созданы машиной lua, то она сама их очистит.В противном случае вам придется дождаться обратного вызова gc в коде C и освободить память самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top