SharedTable
*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ã
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
Tóm Tắt
Chức Năng
Người Tạo
new
Chức Năng
clone
Tham Số
Lợi Nhuận
Mẫu mã
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
Tham Số
Lợi Nhuận
increment
Tham Số
Lợi Nhuận
Mẫu mã
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
Tham Số
Lợi Nhuận
Mẫu mã
local st = SharedTable.new()
st["x"] = "abcd"
SharedTable.update(st, "x", function(v)
assert(v == "abcd")
return v .. "e"
end)
assert(st["x"] == "abcde")