SharedTable
*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
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))
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
Funciones
Constructores
new
Funciones
clone
Parámetros
Devuelve
Muestras de código
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")
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
Devuelve
increment
Parámetros
Devuelve
Muestras de código
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))
update
Parámetros
Devuelve
Muestras de código
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")