SharedTable

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

実行コンテキスト間で共有できるテーブルのようなデータ構造を表します。並列 Luau の場合、Parallel Luau を使用して、スクリプトの親子間で状態を共有できます。

スクリプト間の共有テーブルを通信するためのいくつかの idiomatic な方法があります。1つのメソッドは、SharedTable 内の SharedTableRegistry オブジェクトをストアし、取り出すことです

Luau テーブルのように、 SharedTable オブジェクトはキー値の要素ペアを保存します。Luau テーブルとは、Roblox エンジンの他の制限と同様、共有テーブルにのみ選択されたオブジェクトが保存できます。

キーは (1) 文字列であるか、(2) 2 32 以下の非正数の整数である必要があります。他の種類のキーはサポートされていません。

値は次のタイプの 1つを持つ必要があります:ブースト、数値、ベクトル、文字入力、 SharedTable 、またはシリアル化可能なデータータイプ。SharedTable を値として保存することで、ネストされたおよび再帰的なデーター構造を構築できます。

SharedTable オブジェクトは、異なる SharedTable オブジェクトは、同じ内容を持つことがあっても、異なるように比較されません。

Luau テーブルのように、 SharedTable オブジェクトは凍結されることがあり、その場合は読み取りのみが可能になります。フローズンの Datatype.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")