SharedTable

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Đại diện một cấu trúc dữ liệu trong hành lang thực thi có thể được chia sẻ qua các ngữ cảnh thực thi. Mặc dù nó có thể được sử dụng cho các loại dữ liệu chung như lưu trữ dữ liệu, nhưng nó được thiết kế đặc biệt cho sử dụng với Parallel Luau

Có một vài cách idiomatic để truyền đạt các bảng dữ liệu chia sẻ giữa các script. Một trong những phương pháp là lưu và lấy lại SharedTable

Giống như một cái bàn Luau, một đối tượng SharedTable lưu một bộ dữ liệu bộ đôi giá trị chìa khóa. Giống như một cái bàn Luau, chỉ các loại đối tượng được chọn có thể được lưu trong một bảng Đồng Bộ, tương tự như các hạn chế

Các khóa phải là (1) một chuỗi hoặc (2) một số không được hỗ trợ dưới 2 32 . Các loại khóa khác không được hỗ trợ.

Giá trị phải có một trong những loại sau:Boolean, Số, Vectơ, Chuỗi, SharedTable , hoặc một loại dữ đánh máycó thể serIAL hóa. Khả năng lưu một SharedTable như một giá trị trong một SharedTable khác chế cho ph

SharedTable objects are distinct and different SharedTable objects never compare equal, even if they have content that would compare equal.

Giống như một cái bàn Luau, một SharedTable đối tượng có thể được đóng băng, trong đó nó được đọc chỉ

Mẫu mã

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

Tóm Tắt

Người Tạo

Người Tạo

new

new

Tham Số

Chức Năng

clear

void

Tham Số

Lợi Nhuận

void

Tham Số

deep: bool
Giá Trị Mặc Định: false

Lợi Nhuận

Mẫu mã

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

Tham Số

deep: bool
Giá Trị Mặc Định: false

Lợi Nhuận

increment

Tham Số

Lợi Nhuận

Mẫu mã

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

Tham Số

Lợi Nhuận

size

Tham Số

Lợi Nhuận

update

void

Tham Số

Lợi Nhuận

void

Mẫu mã

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