SharedTable

Visualizza obsoleti

*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

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

Sommario

Costruttori

Costruttori

new

new

Parametri

Funzioni

clear

void

Parametri

Restituzioni

void

Parametri

deep: bool
Valore predefinito: false

Restituzioni

Campioni di codice

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

Parametri

deep: bool
Valore predefinito: false

Restituzioni

increment

Parametri

Restituzioni

Campioni di codice

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

Parametri

Restituzioni

size

Parametri

Restituzioni

update

void

Parametri

Restituzioni

void

Campioni di codice

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