SharedTable
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Reprezentuje strukturę danych podobną do tabeli, którą można udostępniać w różnych kontekstach wykonania. Chociaż można ją używać do różnych rodzajów ogólnego przechowywania danych, jest ona zaprojektowana specjalnie dla użycia z Parallel Luau, gdzie można ją używać do udostępniania stanu poprzez różne instancje Actor.
Są kilka sposobów na komunikację tabelami między skryptami. Jeden z nich to przechowywanie i odzyskiwanie obiektów SharedTable w Class.SharedTableRegistry . Rejestr umożliwia każdemu skryptowi w tym samym modelu dany
Podobnie jak w tabeli Luau, obiekt SharedTable przechowuje zestaw pary kluczowych parametrów. W przeciwieństwie do tabeli Luau, tylko wybrane rodzaje obiektów można zapisać w tabeli Udostępnym, podobnie jak inne ograniczenia, które znajdziesz w silniku Roblox.
Klucze muszą być (1) ciągiem lub (2) liczbą całkowitą mniejszą niż 2 32. Inne rodzaje kluczy nie są wspierane.
Wartości muszą mieć jeden z następujących typów:Boolean, Number, Vector, String, SharedTable lub serIALizowalny wpisywaćdanych. Umiejętność przechowywania SharedTable jako wartości w innym SharedTable pozwala na budowę złożonych struktur danych.
Obiekty Datatype.SharedTable są różni i różni Datatype.SharedTable obiekty nigdy nie porównują się równo, nawet jeśli mają treści, które porównują się równo.
Podobnie jak tabela Luau, obiekt SharedTable może być zamrożony, w którym przypadku jest czytelny tylko. Próbka zmodyfikowania zamrożonego SharedTable b
Przykłady kodu
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
Podsumowanie
Funkcje
Konstruktorzy
new
Funkcje
clone
Parametry
Zwroty
Przykłady kodu
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
Parametry
Zwroty
Przykłady kodu
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
Parametry
Zwroty
Przykłady kodu
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")