マップの宣言とアクセス
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 16/73。
型付きマップの宣言は、これまで書いてきたテーブルコンストラクタと同じように見えます。アノテーションによってキーと値の型を固定するだけです。
local stock: {[string]: number} = {apples = 12, bananas = 5}読み取りと書き込みには、おなじみのインデックス操作を使用します。有効な識別子であるキーの場合、stock.apples と stock["apples"] は同じエントリーにアクセスします。ブラケット形式は、スペースを含むキーや変数に保持されているキーも処理できます。
stock["cherries"] = 20 -- 新しいエントリを追加
stock.bananas = 8 -- 既存のものを更新
print(stock["apples"]) -- 12
print(stock["plums"]) -- nil — 一度も設定されていない型チェッカーはすべての書き込みを監視します。"many" は数値ではないため stock["apples"] = "many" はエラーになり、キーは文字列でなければならないためキーとして数値を使用することもエラーになります。
エントリーを削除するには、そのキーに nil を代入します。stock["bananas"] = nil によって完全に削除され、その後の読み取りでは nil が返されます。独立した削除関数はありません。これが標準的な Lua の慣習であり、マップ上でも正しく型チェックされます。
チャレンジ
簡単型付きの map である stock: {[string]: number} を作成し、apples = 12 および bananas = 5 で初期化します。次に:
- 値
20を持つ新しいentryであるcherriesをaddします bananasを8にupdateします
最後に、以下をそれぞれ別の行に出力(print)します:
applesのstockbananasのstockcherriesのstockplumsのstock— 設定したことがないkey
自分で試してみよう
-- ここにコードを書いてください
-- 1) stock: {[string]: number} を apples = 12, bananas = 5 で宣言する
-- 2) cherries = 20 を追加し、bananas を 8 に更新する
-- 3) apples、bananas、cherries、それから plums を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数