Domanda

E 'possibile per un pezzo di Lua userdata di riferimento in possesso di un oggetto Lua? (Come un tavolo, o di un altro pezzo di userdata?). In sostanza, quello che voglio sapere è:

Posso creare un pezzo di userdata in modo tale taht quando viene eseguito gc, i dati degli utenti possono dire: "Ehi, ho in mano i riferimenti a questi altri oggetti, li segnano così"

EDIT: rispondere alle LHF:

Supponiamo che io sono:

struct Vertex {
  double x, y, z;
}

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

Ora, posso fare:

struct Foo {
  Vertex v;
  Quaternion q;
}

ma supponiamo invece che voglio:

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

[vale a dire. supponiamo Vertex & Quaternion sono veramente grossi pezzi di userdata].

Ora, supponiamo che io ho una funzione che prende un Lua userdata Vertex, e un userdata Quaternion, e crea un datiutente Bar (Non voglio un Foo userdata perché voglio risparmiare lo spazio) - allora necessità I in qualche modo per l'userdata Vertex * / * Quaternion di non essere gc-ed.

È stato utile?

Soluzione

  

E 'possibile per un pezzo di dati degli utenti lua di riferimento in possesso di un oggetto lua?

No. A userdata non può tenere un puntatore ad un altro oggetto Lua. Se si desidera utilizzare un userdata per tenere in vita un altro oggetto Lua, è necessario farlo utilizzando tavoli deboli . Il libro di Roberto come href="http://www.lua.org/pil/17.html" rel="nofollow sezione su come farlo .

Altri suggerimenti

Conosci un po 'che ho fatto niente con lua. Penso che se i dati a cui fa riferimento è stato creato dalla macchina lua, allora sarà ripulirlo stessa. In caso contrario, è necessario attendere la richiamata gc nel codice C e liberare la memoria da soli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top