SharedTable
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Repräsentiert eine tabellenartige Datenstruktur, die über mehrere Ausführungs-Kontexts geteilt werden kann. Während es für verschiedene Arten von allgemeinen Datenspeicherung verwendet werden kann, ist es speziell für den Gebrauch mit Parallel Luau , wo es verwendet werden kann, um den Zustand über Skripte unter verschiedenen Actor Instanzen zu teilen.
Es gibt ein paar idiomatische Möglichkeiten, zwischen Skripten geteilte Tabellen zu kommunizieren. Eine Methode ist es, Tabellen in der SharedTable zu speichern und abzurufen SharedTableRegistry. Die Registrierung ermöglicht es jedem Skript im selben Datenmodell,
Wie eine Luau-Tabelle speichert ein SharedTable-Objekt eine Reihe von Schlüsselwertpaaren. Im Gegensatz zu einer Luau-Tabelle können nur ausgewählte Arten von Objekten in einem SharedTable gespeichert werden, ähnlich wie andere Einschränkungen, die Sie in der Roblox-Engine finden.
Schlüssel müssen entweder (1) eine Zeichenfolge oder (2) eine nicht negative Zahl sein, die weniger als 2 32 ist. Andere Arten von Schlüsseln werden nicht unterstützt.
Werte müssen einen der folgenden Arten haben:Boolean, Number, Vector, String, SharedTable , oder einen serIALisierten eingeben. Die Fähigkeit, einen SharedTable als Wert in einem anderen SharedTable zu speichern, ermöglicht die Konstruktion von verschachtelten und recursiven Datenstrukturen.
SharedTable Objekte sind unterschiedlich und nicht identisch SharedTable Objekte vergleichen niemals gleich, auch wenn sie Inhalte haben, die gleich sein sollten.
Wie eine Luau-Tabelle kann ein SharedTable-Objekt möglicherweise eingefroren werden, in dem es nur für die Lektüre gelesen wird. Ein Versuch, ein eingefrorenes SharedTable zu modifizieren, wird einen Fe
Code-Beispiele
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
Zusammenfassung
Funktionen
Konstrukteure
new
Funktionen
clone
Parameter
Rückgaben
Code-Beispiele
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")
increment
Parameter
Rückgaben
Code-Beispiele
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
Parameter
Rückgaben
Code-Beispiele
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")