SharedTable

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

다양한 종류의 일반 데이터 저장소에 대해 공유할 수 있는 테이블 같은 데이터 구조를 나타냅니다. 일반적인 데이터 저장소에 대해 다양한 종류의 일반 데이터 저장소를 사용할 수 있지만, 병렬 Luau에서는 다양한 종류의 스크립트에 대해 상태를 공유하기 위해 특별히

스크립트 간에 공유 테이블을 통신하는 몇 가지 이디엄 방법이 있습니다. 하나의 방법은 레이리를 사용하여 모든 스크립트에서 SharedTable 개체를 저장하고

Luau 테이블과 마찬가지로, SharedTable 개체는 키 값 쌍의 집합을 저장합니다. Luau 테이블과는 달리, 선택한 개체 유형만 공유 테이블에 저장할 수 있습니다. 다른 제한은 Roblox 엔진의 다른 위치에서 찾을 수 있습니다.

열은 (1) 문자열이거나 (2) 2 32 미만의 부정 수 이하여야 합니다. 다른 종류의 열은 지원되지 않습니다.

값은 다음 형식 중 하나여야 합니다.Boolean, Number, Vector, String, SharedTable , 또는 직렬 가능한 데이터 입력.SharedTable 를 다른 형식의 값으로 저장할 수 있는 능력은 중첩 및 재귀 데이터 구조를 구축하는 데 유용합니다.

SharedTable 개체는 서로 다른 SharedTable 개체가 쌍수를 비교하지 않습니다.

Luau 테이블과 마찬가지로, SharedTable 개체는 얼어붙을 수 있습니다. 얼어붙은 읽기 전용이므로 수정할 수 없습니다

코드 샘플

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

생성자

new

new

매개 변수

함수

clear

void

매개 변수

반환

void

매개 변수

deep: bool
기본값: false

코드 샘플

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

매개 변수

deep: bool
기본값: false

increment

매개 변수

반환

코드 샘플

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

매개 변수

반환

size

매개 변수

반환

update

void

매개 변수

반환

void

코드 샘플

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