結論から言うと Roblox(Lua)では primitive_name や player_id のようなキー名は「文字列として書かなくてもよい」のは、Lua の
テーブル構文ルール(糖衣構文 / syntactic sugar) のおかげです。
🎯 結論:構文ルール(糖衣構文)のため
Lua ではテーブルを作るとき、次のような書き方が許されています:
✔ 1. キーが「有効な識別子」の場合は、文字列を書かなくてよい
local t = {
primitive_name = motionName,
player_id = 1,
}
これは糖衣構文で、実際には次と完全に同じ意味です:
local t = {
["primitive_name"] = motionName,
["player_id"] = 1,
}
🧠 なぜこれが許されるのか(Lua の仕様)
Lua のテーブルは「連想配列」ですが、
キーが Lua の識別子ルールに従っている場合だけ、
key = value という短い書き方ができます。
識別子ルールとは:
- 英字または
_で始まる - 英数字と
_のみで構成される - 予約語でない
primitive_name と player_id はこの条件を満たしているため、
["primitive_name"] と書かなくてもよいのです。
❌ 逆に、識別子でない場合は必ず文字列が必要
例:
local t = {
["脚を開く"] = true, -- OK
脚を開く = true, -- ❌ エラー(識別子ではない)
}
🔍 あなたの LoveダンスOS 文脈での意味
LoveダンスOS のプリミティブ名は <脚を開く> のように
識別子ではない文字列 が多いので、Roblox に送るときは:
primitive_name = "<脚を開く>"
のように 必ず文字列で書く必要がある。
しかし、今回の例の primitive_name や player_id は
OS のメタ情報キーであり、識別子として合法なので
糖衣構文が使える、というだけです。
🪶 まとめ
primitive_name = ...は Lua の糖衣構文- 実際には
["primitive_name"] = ...と同じ - Lua の識別子ルールに合うキーだけがこの書き方を許される
- LoveダンスOS のプリミティブ名は識別子ではないので文字列必須
次に深掘りするとしたら:
「LoveダンスOS のプリミティブ名を Lua の識別子に変換するべきか?」
「Roblox 側の JSON / Table 変換でどこまで文字列化するべきか?」
どちらを掘り下げたいですか。