Menu
Coddy logo textTech

ジェネリックなアイデンティティ関数

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

正しく記述されたジェネリック関数(generic function)としての identity 関数の例がこちらです:

local function identity<T>(value: T): T
    return value
end

関数名の後にある <T>型パラメータ(型引数)を宣言しています。これは「呼び出しごとに決定される何らかの型」を表すプレースホルダーです。シグネチャ内では、T を実際の型と同じように使用します。パラメータは T 型であり、関数は T 型を返します。

入力と出力に同じ T を使用することがポイントであり、これによって両者が結び付けられます。identity("hello") を呼び出すと、チェッカーはその呼び出しに対して T = string と判断するため、result(結果)は string になります。identity(42) を呼び出すと T = number となり、結果は number になります。1つの処理本体で、すべての型に対応し、型情報も失われません。

T は慣習的な名称("Type" の略)に過ぎず、<Item><Value> でも同様に機能します。また、Luau において常にそうであるように、山括弧はチェッカーのためだけに存在します。実行時には、これは通常の Lua 関数 function identity(value) return value end として動作します。

challenge icon

チャレンジ

簡単

以下の指定に従って、identity という名前のジェネリック関数を作成してください:

  • 型パラメータ T を宣言する
  • Tvalue という名前の引数を1つ受け取る
  • 戻り値の型を T とし、その値を返す

次に、作成した関数を使用して以下の型付き変数を作成してください:

  • number 型の luckyNumber7 を渡して identity を呼び出す
  • string 型の greeting"Hello, Luau!" を渡して identity を呼び出す
  • boolean 型の isReadytrue を渡して identity を呼び出す

以下をそれぞれ改行して出力してください:

  1. luckyNumber
  2. greeting
  3. isReady
  4. print の中で直接 "generics" を渡して identity を呼び出した結果
  5. print の中で直接 99 を渡して identity を呼び出した結果

自分で試してみよう

-- ここにコードを書いてください
-- 1) identity<T>(value: T): T を定義する
-- 2) identity の呼び出しで luckyNumber、greeting、isReady を作成する
-- 3) それらを出力し、その後 identity("generics") と identity(99) を出力する
quiz icon腕試し

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

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