SharedTable

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Representa una estructura de datos similar a una tabla que se puede compartir en contextos de ejecución. Mientras se puede usar para varios tipos de almacenamiento de datos genéricos, está diseñado específicamente para usar con Parallel Luau , donde se puede usar para compartir el estado entre los scripts padre en diferentes instancias Actor .

Hay algunas formas idiomáticas de comunicar tablas compartidas entre scripts. Un método es almacenar y recuperar objetos SharedTable en el SharedTableRegistry . El registro permite que cualquier script en el mismo modelo de datos obtenga o establezca un Datatype.SharedTable</

Al igual que una tabla Luau, un objeto SharedTable almacena un conjunto de par de valores de clave. A diferencia de una tabla Luau, solo los tipos seleccionados de objetos se pueden almacenar en un SharedTable, similar a otras limitaciones que encontrarás en el motor de Roblox.

Las llaves deben ser (1) una cadena o (2) un número de números no negativos menor que 2 32 . Otras clases de llaves no están soportadas.

Los valores deben tener uno de los siguientes tipos:Booleano, Número, Vector, Cuerda, SharedTable , o un introducirde datos serializable. La capacidad de almacenar un SharedTable como valor en otro SharedTable permite la construcción de estructuras de datos en capas.

SharedTable objetos son objetos distintos y diferentes SharedTable objetos nunca se comparan igual, incluso si tienen contenido que se compararía igual.

Al igual que una tabla Luau, un objeto de SharedTable puede congelarse, en cuyo caso es solo de lectura. Un intento de modificar un objeto congelado de SharedTable aumentará un error. Un objeto congel

Muestras de código

Element Access

local st = SharedTable.new()
st[1] = "a"
st["x"] = true
st.y = 5
assert(st[1] == "a")
assert(st["x"] == true)
assert(st.x == true)
assert(st["y"] == 5)
assert(st.y == 5)
-- true is not a valid SharedTable key, so attempting to set that key
-- fails:
assert(not pcall(function() st[true] = 100 end))
-- A function is not a valid SharedTable value, so attempting to set a
-- value to a function fails:
assert(not pcall(function() st["f"] = function() end end))
Element Iteration

local st = SharedTable.new({"a", "b", "c"})
for k, v in SharedTable.clone(st, false) do
print(k, ": ", v)
end
for k, v in st do
print(k, ": ", v)
end

Resumen

Constructores

Constructores

new

new

Parámetros

Funciones

clear

void

Parámetros

Devuelve

void

Parámetros

deep: bool
Valor predeterminado: false

Devuelve

Muestras de código

Shallow Clone

local original = SharedTable.new()
original["a"] = "original a"
original["b"] = "original b"
original["c"] = SharedTable.new()
original["c"]["d"] = "original d"
local clone = SharedTable.clone(original, false)
clone["a"] = "new a"
clone["b"] = "new b"
clone["c"]["d"] = "new d"
assert(original["a"] == "original a")
assert(original["b"] == "original b")
-- Because this was a shallow clone, original["c"] and clone["c"] are
-- the same SharedTable object.
assert(original["c"] == clone["c"])
assert(original["c"]["d"] == "new d")
Deep Clone

local original = SharedTable.new()
original["a"] = "original a"
original["b"] = "original b"
original["c"] = SharedTable.new()
original["c"]["d"] = "original d"
local clone = SharedTable.clone(original, true)
clone["a"] = "new a"
clone["b"] = "new b"
clone["c"]["d"] = "new d"
assert(original["a"] == "original a")
assert(original["b"] == "original b")
-- Because this was a deep clone, clone["c"] is a clone of original["c"];
-- they are distinct SharedTable objects.
assert(original["c"] ~= clone["c"])
assert(original["c"]["d"] == "original d")

cloneAndFreeze

Parámetros

deep: bool
Valor predeterminado: false

Devuelve

increment

Parámetros

Devuelve

Muestras de código

Increment

local st = SharedTable.new()
st["x"] = 1
local oldValue = SharedTable.increment(st, "x", 1)
assert(oldValue == 1)
assert(st["x"] == 2)
-- The value of the specified key must be a number. If it is not a
-- number, the call will fail:
st["y"] = "test"
assert(not pcall(function() SharedTable.increment(st, "y", 1) end))

isFrozen

Parámetros

Devuelve

size

Parámetros

Devuelve

update

void

Parámetros

Devuelve

void

Muestras de código

Update

local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")