SharedTable

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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

Amostras 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

Resumo

Construtores

Construtores

new

new

Parâmetros

Funções

clear

void

Parâmetros

Devolução

void

Parâmetros

deep: bool
Valor Padrão: false

Devolução

Amostras 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 Padrão: false

Devolução

increment

Parâmetros

Devolução

Amostras 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

Devolução

size

Parâmetros

Devolução

update

void

Parâmetros

Devolução

void

Amostras 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")