ジェネリック関数の使用
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 59/73。
identity に T が何であるかを伝える必要はありません — チェッカーが自分自身でそれを解決します。これが 型推論 (type inference) です。呼び出し箇所ごとに、Luau は引数を確認して T を解決します:
local word = identity("Luau") -- T は string として推論される
local count = identity(12) -- T は number として推論される
local flag = identity(false) -- T は boolean として推論される各呼び出しは独立しています — T はある行では string になり、次の行では number になることができます。推論された結果は、手書きのアノテーションと同じくらい安全です:word はチェッカーにとって string であり、完全な自動補完とエラーチェックが有効になります。
TypeScript との1つの重要な違い:TS では identity<number>(5) のように呼び出し箇所で型を強制できます。Luau には呼び出し箇所の型引数がありません — この行は特別な構文ではないため、Luau は山括弧を小なり/大なりの比較として読み取り、コードは失敗(fails)します。型を明示的に指定したい場合は、代わりに変数を注釈(アノテーション)します:
local count: number = identity(12)おなじみのツールを使って推論の動作を確認できます:typeof は値の 実行時 の型名を返すため、print(typeof(identity(12))) は number を出力します — 値は generic 関数をまったく変更されずに通過しました。
チャレンジ
簡単前回の lesson の generic な identity function はすでにエディタ内に用意されています。その推論を活用しましょう。
チェッカーに T を推論させて(型注釈は不要です)、three つの変数を create してください:
word—"Luau"を渡してidentityを呼び出すcount—12を渡してidentityを呼び出すflag—falseを渡してidentityを呼び出す
以下をそれぞれ行を分けて print してください:
wordtypeof(word)の結果counttypeof(count)の結果flagtypeof(flag)の結果
自分で試してみよう
-- 前のレッスンのジェネリックなidentity関数
local function identity<T>(value: T): T
return value
end
-- ここにコードを書いてください
-- 1) identity呼び出しでword、count、flagを作成する(Tは推論させる)
-- 2) 各値とそのtypeofを続けて出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数