テーブルによる数値Enum
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 52/73。
定数テーブルパターンを正しく構築してみましょう。PascalCaseのテーブル名を選択し、各メンバーに明示的な数値を割り当てます。それ以降、コードは名前を使って記述できるようになります:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}TypeScriptの enum とは異なり、自動的に番号が割り振られることはありません — すべての値を自分で選択します。1 から始めるのはLuaの規則によく合いますが、どんな構成でも動作します(200 や 404 のようなHTTPスタイルのコードでも問題ありません)。
メンバーは比較で威力を発揮します。ロールを受け取る関数は、生の数値の代わりに名前付き定数で分岐できます:
local function checkPermissions(role: number)
if role == UserRole.Admin then
print("Full access granted")
elseif role == UserRole.Editor then
print("Edit access granted")
else
print("View access only")
end
endパラメータの型が number であることに注意してください — テーブルパターン単体では、許可される数値を制限することはできません。その保証こそが、次のレッスンで学ぶリテラルユニオンによって追加されるものです。
チャレンジ
簡単3つのメンバーを持つUserRoleという名前の定数テーブルを作成します:
Admin=1Editor=2Viewer=3
role: numberを受け取り、以下を出力する関数checkPermissionsを作成します:
- roleが
UserRole.Adminの場合はFull access granted - roleが
UserRole.Editorの場合はEdit access granted - それ以外の場合は
View access only
次に、順番に以下を実行します:
UserRole.Adminを出力するUserRole.Editorを出力するUserRole.Viewerを出力するcheckPermissions(UserRole.Admin)を呼び出すcheckPermissions(UserRole.Editor)を呼び出すcheckPermissions(UserRole.Viewer)を呼び出す
自分で試してみよう
-- ここにコードを書く
-- 1) UserRole定数テーブルを作成する (Admin=1, Editor=2, Viewer=3)
-- 2) if/elseif/elseを使ってcheckPermissions(role: number)を書く
-- 3) 3つのメンバーを出力し、それぞれに対して関数を呼び出す
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ