テーブルによる数値Enum
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 56/80。
これが定数テーブルパターンの全体像です。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段階で表しましょう。
local Level = {Easy = 1, Normal = 2, Hard = 3}を作成します。local function describeLevel(level: number): stringを記述し、Level.Easyの場合は"Relaxed"、Level.Normalの場合は"Standard"、それ以外の場合は"Brutal"を返します。Level.Hard、続いてdescribeLevel(Level.Normal)を出力します。
Run Codeを押すと、出力に3とStandardが表示されます。
自分で試してみよう
-- 1) Level定数テーブル(Easy = 1, Normal = 2, Hard = 3)
-- 2) if/elseif/elseを使ったdescribeLevel(level: number): string
-- 3) Level.Hardを出力し、次にdescribeLevel(Level.Normal)を出力する
Luau入門のすべてのレッスン
8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ自分で練習してみよう: Luauオンラインコンパイラ