SharedTable

사용되지 않는 항목 표시

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

실행 컨텍스트 간에 공유할 수 있는 테이블 같은 데이터 구조를 나타냅니다.다양한 종류의 일반 데이터 저장소로 사용할 수는 있지만, 평행 Luau 에서 사용하도록 특별히 설계되었으며, 여기에서 상위 인스턴스에 속한 스크립트 간에 상태를 공유할 수 있습니다.

스크립트 간에 공유 테이블을 통신하는 데 사용할 수 있는 몇 가지 비유적 방법이 있습니다.하나의 방법은 SharedTable 개체를 SharedTableRegistry에 저장하고 검색하는 것이다.레지스트리는 동일한 데이터 모델의 모든 스크립트가 이름으로 SharedTable 를 가져오거나 설정할 수 있도록 합니다.또 다른 방법은 공유 테이블을 메시지 내부의 다른 Actor:SendMessage()에 보내기 위해 Actor를 사용하는 것입니다.

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

키는 (1) 문자열이거나 (2) 2보다 작은 음의 정수 숫자여야 합니다(32 32 ). 다른 종류의 키는 지원되지 않습니다.

값은 다음 유형 중 하나여야 합니다: Boolean, Number, Vector, String, SharedTable 또는 직렬화 가능한 데이터 입력.다른 SharedTable 에서 값으로 저장할 수 있는 SharedTable 능력은 중첩되고 재귀적인 데이터 구조의 건설을 허용합니다.

SharedTable 개체는 구별되고 다르며 SharedTable 개체는 동일한 내용이 있더라도 동일하게 비교되지 않습니다.

Luau 테이블과 마찬가지로, SharedTable 개체는 얼어붙을 수 있으며, 이 경우 읽기 전용입니다.동결된 SharedTable를 수정하려는 시도는 오류를 발생시킵니다.냉동된 SharedTable 을 먼저 원하는 콘텐츠로 (냉동되지 않고 수정 가능) SharedTable 을 만들고, 그런 다음 SharedTable.cloneAndFreeze() 를 호출하여 냉동된 복제본을 만들 수 있습니다.

코드 샘플

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))
요소 반복

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

()

매개 변수

반환

()

매개 변수

deep: boolean
기본값: false

코드 샘플

얕은 클론

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")
-- 이것이 얕은 복제였기 때문에 original["c"]와 clone["c"]는
-- 동일한 공유 테이블 개체.
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: boolean
기본값: 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

()

매개 변수

반환

()

코드 샘플

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