Menu
Coddy logo textTech

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

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

こちらが、generic function として正しく実装された identity です:

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

関数名の後にある <T>type parameter を宣言します。これは「各 call で決まる何らかの type」を表すプレースホルダーです。シグネチャ内では、実際の type と同じように T を使用します。つまり、パラメーターは T であり、関数は T を返します。

入力と出力に 同じ T を使うことが、この仕組みの核心です。これによって両者が結び付けられます。identity("hello") を call すると、チェッカーはその call について T = string と判断するため、result は string になります。identity(42) を call すると、T = number となるため、result は number になります。1つの本体で、every type に対応し、何も失われません。

T はあくまで慣用的な名前(「Type」の略)です。<Item><Value> でも同じように機能します。そして Luau ではいつもそうですが、山かっこはチェッカーのためだけに存在します。runtime では、これは単純な Lua 関数である function identity(value) return value end です。

challenge icon

チャレンジ

簡単

identityという名前の generic function を作成します。この関数は次の要件を満たします。

  • type パラメーター T を宣言する
  • type Tvalue という名前のパラメーターを 1 つ受け取る
  • その値を、return type T で返す

次に、関数を使用して次の型付き変数を作成します。

  • type numberluckyNumber7 を指定して identity を call する
  • type stringgreeting"Hello, Luau!" を指定して identity を call する
  • type booleanisReadytrue を指定して identity を call する

次の内容を、それぞれ 1 行ずつ print します。

  1. luckyNumber
  2. greeting
  3. isReady
  4. "<code>generics" を指定して、print の中で直接 identity を call した結果
  5. 99 を指定して、print の中で直接 identity を call した結果

自分で試してみよう

-- ここにコードを書いてください
-- 1) identity&lt;T&gt;(value: T): T を定義する
-- 2) identity の呼び出しで luckyNumber、greeting、isReady を作成する
-- 3) それらを出力し、次に identity(指示からの正確なテキスト) と identity(99) を出力する
quiz icon腕試し

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

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

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