要素の追加と読み込み
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 14/73。
すでに table.insert と table.remove を使って Lua のテーブルを拡大・縮小していますね。どちらも型付き配列でまったく同じように動作します。違いは、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) は最後の要素を取り出して返します。table.remove(t, 1) は最初の要素を削除し、すべてを下に移動します。配列は {string} 型なので、Luau は返される値が string であることを認識しています。
読み取りは通常の Lua と同じくらい寛容です。何も保持していないインデックス、queue[0]、queue[-1]、または #queue を超える位置は、静かに nil と評価されます。エラーは発生しないため、存在するかどうかわからない値を使う前に nil をチェックしてください。
もう一つ便利な道具があります。table.freeze(t) はテーブルを実行時に読み取り専用にします。その後で変更しようとすると、エラーが発生します。これは、作成後に決して変更してはいけない定数データ(設定や固定されたレベル一覧など)のための、Luau における答えです。
チャレンジ
簡単queue: {string} 型の配列を作成し、"save" と "load" で初期化します。その後、次の操作を行います。
"<code>quit" をtable.insertで append する- position 1 に
"<code>help" を insert する table.removeで last の command を remove し、返された値を保存する
最後に、次の内容をそれぞれ別の行に print します。
- removed command
- 残っている command の数
- queue の first command
queue[10]:何も保持していないスロット
自分で試してみよう
-- ここにコードを書いてください
-- 1) キューを宣言: {string} で "save" と "load"
-- 2) 指示の正確なテキストを追加し、指示の正確なテキストを位置1に挿入する
-- 3) 最後のコマンドを削除し、その後4つの値を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ