SharedTable
*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
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
Résumé
Fonctions
Constructeurs
new
Fonctions
clone
Paramètres
Retours
Échantillons de code
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
Paramètres
Retours
increment
Paramètres
Retours
Échantillons de code
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
Paramètres
Retours
Échantillons de code
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")