SharedTable

Tampilkan yang Tidak Digunakan Lagi

*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

Element Access

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))
Element Iteration

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

Konstruktor

Konstruktor

new

new

Parameter

Fungsi

clear

void

Parameter

Memberikan nilai

void

Parameter

deep: bool
Nilai Default: false

Memberikan nilai

Contoh Kode

Shallow Clone

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")
Deep Clone

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

deep: bool
Nilai Default: false

Memberikan nilai

increment

Parameter

Memberikan nilai

Contoh Kode

Increment

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))

isFrozen

Parameter

Memberikan nilai

size

Parameter

Memberikan nilai

update

void

Parameter

Memberikan nilai

void

Contoh Kode

Update

local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")