Pregunta

¿Es posible que un pedazo de Lua datos de usuario a la referencia a un objeto de retención Lua? (Al igual que una mesa u otra pieza de datos de usuario?). Básicamente, lo que quiero saber es:

¿Puedo crear una hoja de datos de usuario en un taht tal manera cuando se ejecuta el GC, los datos de usuario pueden decir: "!. Hey, yo estoy sosteniendo referencias a estos otros objetos, los marcan así"

EDIT: responder a LHF:

Supongamos que tengo:

struct Vertex {
  double x, y, z;
}

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

Ahora, puedo hacer:

struct Foo {
  Vertex v;
  Quaternion q;
}

pero supongamos vez que quiero:

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

[es decir. supongamos Vertex y Quaternion son realmente grandes trozos de datos de usuario].

Ahora, supongamos que tengo una función de usuario Lua que tiene un vértice datos de usuario, datos de usuario y un cuaternión, y crea un userdata Bar (No quiero un Foo datos de usuario ya que quiero ahorrar el espacio) - entonces yo necesidad de alguna manera para el Vertex datos de usuario * / * Quaternion a no ser gc-ed.

¿Fue útil?

Solución

  

¿Es posible que una parte de los datos del usuario a lua referencia a un objeto de retención lua?

n. A los datos de usuario no puede contener un puntero a otro objeto Lua. Si desea utilizar un userdata para mantener viva Lua otro objeto, que tiene que hacer es usar mesas débiles . El libro de Roberto como href="http://www.lua.org/pil/17.html" rel="nofollow sección sobre cómo hacerlo .

Otros consejos

Ha pasado un tiempo desde que hice nada con lua. Creo que si los datos referenciados fue creado por la máquina lua, entonces será limpiarlo sí. De lo contrario, debe esperar a que la devolución de llamada GC en el código C y liberar la memoria usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top