Menu
CoddyTech

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

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

これが、正しく実装されたジェネリック関数としての恒等関数です:

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

チャレンジ

簡単

型を保ったまま任意の値を返す関数を1つ書きましょう。

  1. local function identity<T>(value: T): Tを書き、valueを返します。
  2. local luckyNumber: number = identity(7)とlocal greeting: string = identity("Hello, Luau!")を宣言します。
  3. luckyNumber、続けてgreetingを出力します。

コードを実行を押します。出力には7とHello, Luau!が表示されます。

自分で試してみよう

-- 1) identity<T>(value: T): T
-- 2) identity の呼び出しから得られる luckyNumber と greeting
-- 3) 両方を出力する

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

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