Menu
Coddy logo textTech

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

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

正しく書かれた identity 関数がこちらです — ジェネリック関数として定義されています:

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

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

入力と出力に同じ T を使用することが重要なポイントです — これによって両者が関連付けられます。identity("hello") を呼び出すと、チェッカーはその呼び出しに対して T = string と決定するため、結果は 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 とする

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

  • numberluckyNumberidentity7 で呼び出す
  • stringgreetingidentity"Hello, Luau!" で呼び出す
  • booleanisReadyidentitytrue で呼び出す

以下をそれぞれ個別の行に出力してください:

  1. luckyNumber
  2. greeting
  3. isReady
  4. print の中で直接 identity"<code>generics" で呼び出した結果
  5. print の中で直接 identity99 で呼び出した結果

自分で試してみよう

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

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

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

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