SharedTable
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Menyajikan struktur data seperti tabel yang dapat dibagikan di konteks eksekusi. Meskipun dapat digunakan untuk berbagai jenis penyimpanan data umum, ia dirancang khusus untuk digunakan dengan Parallel Luau, di mana ia dapat digunakan untuk berbagi status di antara skrip yang diwarisi di berbagai Actor instans.
Ada beberapa cara idiomatik untuk berkomunikasi tabel bersama di antara skrip. Salah satu metode adalah menyimpan dan mengambil SharedTable objek di SharedTableRegistry . Registry memungkinkan setiap script dalam model data yang
Seperti tabel Luau, objek SharedTable menyimpan set item nilai kunci. Berbeda dengan tabel Luau, hanya jenis-jenis objek yang Anda pilih yang dapat disimpan di Tabel Shared, mirip dengan batasan lain yang dapat Anda temukan di mesin Roblox ini.
Kunci harus (1) menjadi (2) angka intinerator negatif kurang dari 2 32 . Jenis kunci lainnya tidak didukung.
Nilai harus memiliki salah satu dari berikut jenis:Boolean, Angka, Vector, Strings, SharedTable , atau ketikdata seriables. Kemampuan untuk menyimpan SharedTable sebagai nilai dalam SharedTable lainnya memungkinkan pembangunan struktur data yang terbungkus dan recursive.
SharedTable objek dibandingkan dan berbeda SharedTable objek tidak pernah berkesamaan, bahkan jika mereka memiliki konten yang akan berkesamaan.
Seperti tabel Luau, objek SharedTable mungkin dibekukan, di mana kasusnya hanya dibaca. Upaya untuk mengubah tabel beku SharedTable akan menghasilkan k
Contoh Kode
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
Rangkuman
Fungsi
Konstruktor
new
Fungsi
clone
Parameter
Memberikan nilai
Contoh Kode
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
Parameter
Memberikan nilai
increment
Parameter
Memberikan nilai
Contoh Kode
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
Memberikan nilai
Contoh Kode
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")