Menu
Coddy logo textTech

ジェネリック関数の使用

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

identityT が何であるかを伝える必要はありません — チェッカーが自分自身でそれを解決します。これが 型推論 (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 関数をまったく変更されずに通過しました。

challenge icon

チャレンジ

簡単

前回の lessongenericidentity function はすでにエディタ内に用意されています。その推論を活用しましょう。

チェッカーに T を推論させて(型注釈は不要です)、three つの変数を create してください:

  • word"Luau" を渡して identity を呼び出す
  • count12 を渡して identity を呼び出す
  • flagfalse を渡して identity を呼び出す

以下をそれぞれ行を分けて print してください:

  1. word
  2. typeof(word) の結果
  3. count
  4. typeof(count) の結果
  5. flag
  6. typeof(flag) の結果

自分で試してみよう

-- 前のレッスンのジェネリックなidentity関数
local function identity<T>(value: T): T
    return value
end

-- ここにコードを書いてください
-- 1) identity呼び出しでword、count、flagを作成する(Tは推論させる)
-- 2) 各値とそのtypeofを続けて出力する
quiz icon腕試し

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

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