ユニオン型としての文字列Enum
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 53/73。
数値は暗号のようなログを生みます。2 を見てもほとんど何も分かりませんが、"down" を見ればすべて分かります。読みやすい enum には、Luau の literal union types が適しています。メンバーが正確な文字列である type です。
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ 編集中の型エラーDirection で annotated された変数には、これら four つの strings のいずれかだけを格納でき、それ以外は格納できません。1 文字でも入力を間違えると、checker がすぐに検出します。bug が player に届くことはありません。
runtime では、値は plain strings です。これらを print したり、連結したり、== で比較したりできます。strings について知っていることはすべて当てはまります。
print(facing) -- 上
print(`facing {facing}`) -- 上向きここまでに登場した 2 つのパターンを比較してみましょう。constant table は members を保持する 1 つの runtime value(UserRole)を作成します。一方、literal union は value をまったく作成しません。Direction table は存在せず、どの strings が適合するかについて checker が適用する rule だけが存在します。説明的で自己文書化された values を、runtime コストなしで使えるため、literal unions は Luau code における定番の enum スタイルです。
チャレンジ
簡単Direction という名前のリテラルユニオン型を作成し、メンバーとして "up"、"down"、"left"、"right" を指定してください。
それぞれに Direction の型注釈を付けた4つの変数を作成してください:
upDirection="up"downDirection="down"leftDirection="left"rightDirection="right"
次の内容を、それぞれ別の行に出力してください:
upDirectiondownDirectionleftDirectionrightDirectionleftDirectionから文字列補間を使って作成したメッセージThe player moves left
自分で試してみよう
-- ここにコードを書いてください
-- 1) 型 Direction を4つの文字列リテラルのユニオンとして定義する
-- 2) 注釈付きの4つの変数を作成する
-- 3) それぞれを出力し、次に補間されたメッセージを出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ自分で練習してみよう: Luaオンラインコンパイラ