SharedTable
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Rappresenta una struttura dati simile a una tabella che può essere condivisa tra contesti di esecuzione. Mentre può essere utilizzato per varie sorte di dati di archiviazione generici, è progettato specificamente per l'uso con Parallel Luau , dove può essere utilizzato per condividere lo stato tra gli script parented under different Actor istanze.
Ci sono un paio di modi idiomatici per comunicare tabelle condivise tra gli script. Un metodo è archiviare e recuperare oggetti SharedTable negli SharedTableRegistry . Il registro consente a qualsiasi script nel modello di dati stesso di ottenere
Come una tabella Luau, un oggetto SharedTable memorizza un insieme di coppie di valori chiave. A differenza di una tabella Luau, solo i tipi di oggetti selezionati possono essere memorizzati in una SharedTable, simile alle altre restrizioni che troverai altrove nel motore Roblox.
Le chiavi devono essere (1) una stringa o (2) un numero non negativo inferiore a 2 32 . Altri tipi di chiavi non sono supportati.
I valori devono avere uno dei seguenti tipi:Boolean, Number, Vector, String, SharedTable , o un inserisci / scrividi dati serializzabile. La capacità di memorizzare un SharedTable come valore in un altro SharedTable consente la costruzione di strutture di dati innesitate e递orsi.
SharedTable oggetti sono distinti e diversi SharedTable oggetti non sono mai paragonabili, anche se hanno contenuti che potrebbero paragonarsi.
Come una tabella Luau, un oggetto SharedTable può essere congelato, in cui caso è letto solo. Un tentativo di modificare un congelato SharedTable avrà un errore. Un congelato Datatype
Campioni di codice
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
Sommario
Funzioni
Costruttori
new
Funzioni
clone
Parametri
Restituzioni
Campioni di codice
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
Parametri
Restituzioni
increment
Parametri
Restituzioni
Campioni di codice
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
Parametri
Restituzioni
Campioni di codice
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")