Menu
Coddy logo textTech

ジェネリック関数の使用

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

identityT が何であるかを決して伝えていません。チェッカーが自動的に推論します。これは型推論です。各呼び出し箇所で、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 は山括弧を小なり比較・大なり比較として解釈し、コードは失敗します。型を明示的に指定したい場合は、代わりに変数に注釈を付けます。

local count: number = identity(12)

おなじみのツールを使って、推論が動作する様子を確認できます。typeof は値の実行時の型名を返すため、print(typeof(identity(12)))number を出力します。つまり、その値は generic function を通過しても完全に変更されていません。

challenge icon

チャレンジ

簡単

前のレッスンのジェネリックな identity 関数は、すでにエディターにあります。その型推論を活用しましょう。

チェッカーに T を推論させて、3つの変数を作成します(アノテーションは不要です)。

  • word"Luau" を使って identity を呼び出す
  • count12 を使って identity を呼び出す
  • flagfalse を使って identity を呼び出す

次の内容を、それぞれ別の行に出力します。

  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入門のすべてのレッスン

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