Menu
Coddy logo textTech

テーブルによる数値Enum

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 52/73。

constant-table パターンを正しく構築しましょう。PascalCase の table 名を選び、各 members に明示的な number を割り当てます。それ以降、コードは名前で語るようになります。

local UserRole = {
    Admin = 1,
    Editor = 2,
    Viewer = 3,
}

TypeScript の enum とは異なり、自動で番号が割り当てられることはありません。すべての値を自分で選びます1 から始めるのは Lua の慣習によく合いますが、どのような方式でも構いません(200404 のような HTTP 形式のコードでも問題ありません)。

members は比較で威力を発揮します。role を受け取る function では、単なる number ではなく、named constants を使って分岐できます。

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 になっている点に注目してください。table パターンだけでは、どの number が許可されるかを制限できません。その保証を追加するのが、次のレッスンで扱うリテラルユニオンです。

challenge icon

チャレンジ

簡単

UserRole という constant table を three members で作成します:

  • Admin = 1
  • Editor = 2
  • Viewer = 3

role: number を受け取り、次の内容を print する function checkPermissions を作成します:

  • role が UserRole.Admin の場合は Full access granted
  • role が UserRole.Editor の場合は Edit access granted
  • それ以外の場合は View access only

次に、以下の順番で実行します:

  1. UserRole.Admin を print する
  2. UserRole.Editor を print する
  3. UserRole.Viewer を print する
  4. checkPermissions(UserRole.Admin) を call する
  5. checkPermissions(UserRole.Editor) を call する
  6. checkPermissions(UserRole.Viewer) を call する

自分で試してみよう

-- ここにコードを書いてください
-- 1) UserRole定数テーブルを作成する (Admin=1, Editor=2, Viewer=3)
-- 2) if/elseif/elseを使ってcheckPermissions(role: number)を書く
-- 3) 3つのメンバーを出力し、それぞれに対して関数を呼び出す
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ