SharedTable

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Représente une structure de données semblable à une table qui peut être partagée dans différents contextes d'exécution. Bien qu'il puisse être utilisé pour divers types de stockage de données généraux, il est conçu spécialement pour l'utilisation avec Parallel Luau, où il peut être utilisé pour partager l'état entre les scripts parentés sous différentes instances Actor.

Il y a quelques façons idiomatiques de communiquer des tables partagées entre les scripts. L'un des méthodes est de stocker et de récupérer SharedTable objets dans le SharedTableRegistry . Le messagepermet à tout script dans le même modèle de données d'obtenir ou de dé

Comme une table Luau, un objet SharedTable stocke un ensemble de paires d'éléments clé-valeur. Contrairement à une table Luau, seuls les types d'objets sélectionnés peuvent être stockés dans un SharedTable, similaire à d'autres restrictions que vous trouverez ailleurs dans le moteur Roblox.

Les clés doivent être (1) une chaîne ou (2) un nombre entier non négatif inférieur à 2 32 . D'autres types de clés ne sont pas pris en charge.

Les valeurs doivent avoir l'un des types suivants : Boeing, Nombre, Vecteur, Chaîne, SharedTable , ou un taperde données sérialisable. La capacité de stocker un SharedTable comme valeur dans un autre SharedTable permet la construction de structures de données imbriquées et récurrentes.

SharedTable les objets sont distincts et différents SharedTable les objets ne se compareraient jamais l'égal, même s'ils ont du contenu qui pourrait comparer l'égal.

Comme une table Luau, un objet SharedTable peut être gelé, dans lequel cas il est seulement lu. Une tentative de modification d'un objet gelé SharedTable sera élevée d'un erreur. Un objet gelé

Échantillons de code

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

Résumé

Constructeurs

Constructeurs

new

new

Paramètres

Fonctions

clear

void

Paramètres

Retours

void

Paramètres

deep: bool
Valeur par défaut : false

Échantillons de code

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

Paramètres

deep: bool
Valeur par défaut : false

increment

Paramètres

Retours

Échantillons de code

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

Paramètres

Retours

size

Paramètres

Retours

update

void

Paramètres

Retours

void

Échantillons de code

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