SharedTable
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
เป็นโครงสร้างข้อมูลที่คล้ายกับตารางที่สามารถแชร์ได้ในบริบทของการประมวลผล โดยสามารถใช้สำหรับหลากหลายของข้อมูลทั่วไป สามารถใช้ได้เฉพาะกับ Parallel Luau ซึ่งสาม
มีวิธีการสื่อสารแบบแสดงผลระหว่างสคริปต์อยู่สองสามวิธี วิธีหนึ่งคือการเก็บและดึง SharedTable
เหมือนโต๊ะ Luau วัตถุ SharedTable เก็บชุดของคู่สมาชิกของค่าตัวละคร ในขณะที่วัตถุ Luau จะเก็บได้เฉพาะชนิดของวัตถุที่คุณเลือกเท่านั้น โดยทั่วไป SharedTables จะเก็บได้เฉพาะชุดของ
ต้องเป็น (1) ตัวอักษรหรือ (2) ตัวเลขอย่างน้อย 2 32 หรือไม่มีประเภทอื่นของตัวอักษร
ค่าต้องมีหนึ่งในรูปแบบต่อไปนี้: บู๊ค, หมายเลข, เวกเตอร์, สตริง, SharedTable หรือประเภท
SharedTable ตัวอย่างเป็นวัตถุที่แตกต่างกัน SharedTable ตัวอย่างไม่เคยเทียบเท่ากัน แม้ว่าพวกเขาจะมีเนื้อหาที่จะเทียบเท่ากัน
เหมือนโต๊ะ Luau ตัววัตถุ SharedTable อาจถูกแช่แข็งในกรณีนี้จะอ่านเท่านั้น การพยา
ตัวอย่างโค้ด
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
สรุป
ฟังก์ชัน
คอนสตรัคเตอร์
new
ฟังก์ชัน
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")
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
พารามิเตอร์
ส่งค่ากลับ
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))
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")