SharedTable
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Koşullar arasında paylaşılabilen bir tablo gibi veri yapısını temsil eder. Genel veri depolama için çeşitli türlerde kullanılabilir, ancak Parallelu Luau , bir Actor instansının altındaki çeşitli Class.Actor instansları arasında durum paylaşılabilir.
Scriptler arasındaki paylaşılan tabloları iletiş kurmak için birkaç idiomatik yöntem vardır. Bir yöntem, ortak bir tabloyu SharedTable ile kaydetip almaktır. Kayıt, herhangi bir mesaj
Bir Luau tablosu gibi, bir SharedTable nesnemi bir dizi anahtar değeri çifti saklar. Bir Luau tablosunda, sadece seçili türlerin nesneleri SharedTable'da saklanabilir, Roblox motorunda bulduğunuz diğer sınırlarla aynıdır.
Anahtarlar ya bir yoluz (1) bir yoluz ya da (2) 2 32'den daha az bir olmayan sayısal bir sayı olmalıdır. Diğer türdeki anahtarlar desteklenmiyor.
Değerler aşağıdaki türlerden birini içermelidir:Boolean, Sayı, Vektor, Strung, SharedTable veya seri olarak kullanılabilir bir veri yaz. SharedTable ile bir değeri başka bir SharedTable ile kullanılabilirliğini izin veren yetenek, üst üste kullanıl
SharedTable nesneler farklı ve ayrı nesnelerdir SharedTable nesneler asla eşit olmayı karşılaştırmaz, hatta eşit içerikleri olsun bile.
Bir Luau tablosu gibi, bir SharedTable nesnesi dondurulabilir ve bu durumda okunur. Bir dondurulmuş SharedTable nesnesini modifi etmeye çalışm
Kod Örnekleri
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
Özet
İşlevler
Yapılandırıcılar
new
İşlevler
clone
Parametreler
Dönüşler
Kod Örnekleri
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
Parametreler
Dönüşler
increment
Parametreler
Dönüşler
Kod Örnekleri
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
Parametreler
Dönüşler
Kod Örnekleri
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")