要素の追加と読み込み
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 14/73。
Luaのテーブルの拡張と縮小は、すでに table.insert と table.remove を使って行っていますが、これらはどちらも型付き配列でも全く同じように機能します。違いは、Luauが挿入する内容をチェックするようになったことです。{number} 配列に string をプッシュしようとすると、実行時に混乱したプレイヤーが発見するのではなく、入力中にフラグが立てられます。
local queue: {string} = {"save", "load"}
table.insert(queue, "quit") -- 末尾に追加
table.insert(queue, 1, "help") -- 位置1に挿入し、残りをシフト
local last = table.remove(queue) -- 最後の要素を削除して返すtable.remove(t) は最後の element を取り出して返します。table.remove(t, 1) は first の要素を削除して、残りのすべてを down 方向にシフトします。配列の型が {string} であるため、Luauは返される値が string であることを認識します。
読み取りは通常のLuaと同様に寛容です。何も存在しないインデックス(queue[0]、queue[-1]、または #queue を超えるインデックス)は、エラーを出さずに静かに nil と評価されます。エラーは発生しないため、存在するかどうか確実でない値を使用する前に nil の check を行ってください。
もう1つ役立つツールとして、table.freeze(t) はテーブルを実行時に読み取り専用にします。それ以降に修正しようとするとエラーが発生します。これは、作成後に変更してはならない定数データ(設定や固定レベルリストなど)に対するLuauの解決策です。
チャレンジ
簡単"save" と "load" で初期化された型付き配列 queue: {string} を作成します。その後:
table.insertを使って"quit"を append します- position 1 に
"help"を insert します table.removeを使って last command を remove し、返された値を保持します
最後に、それぞれを改行して print します:
- removed された command
- 残っている command の数
- queue 内の first command
queue[10]— 何も入っていないスロット
自分で試してみよう
-- ここにコードを書いてください
-- 1) キューを宣言: {string} で "save" と "load"
-- 2) "quit" を追加し、位置 1 に "help" を挿入
-- 3) 最後のコマンドを削除し、その後4つの値を出力
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数