Menu
CoddyTech

Generyczna funkcja identycznościowa

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 62 z 80.

Oto poprawnie zdefiniowana funkcja identycznościowa jako funkcja generyczna:

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

<T> po nazwie funkcji deklaruje parametr typu: symbol zastępczy oznaczający „jakiś typ, określany przy każdym wywołaniu”. W sygnaturze używasz T dokładnie tak jak prawdziwego typu: parametr ma typ T, a funkcja zwraca wartość typu T.

Cały trik polega na użyciu tego samego T dla wejścia i wyjścia. Dzięki temu są ze sobą powiązane. Wywołaj identity("hello"), a mechanizm sprawdzający typy ustali, że w tym wywołaniu T = string, więc wynikiem będzie wartość typu string. Wywołaj identity(42), a T = number, więc wynikiem będzie wartość typu number. Jedna funkcja obsługuje wszystkie typy i niczego nie traci.

T to tylko umowna nazwa (skrót od „Type”): równie dobrze sprawdzą się <Item> lub <Value>. I jak zawsze w Luau, nawiasy ostrokątne są potrzebne tylko mechanizmowi sprawdzającemu typy: w czasie działania programu jest to zwykła funkcja Lua function identity(value) return value end.

challenge icon

Wyzwanie

Łatwy

Napisz jedną funkcję, która zwraca dowolną wartość z zachowaniem jej typu.

  1. Napisz local function identity<T>(value: T): T, która zwraca value.
  2. Zadeklaruj local luckyNumber: number = identity(7) oraz local greeting: string = identity("Hello, Luau!").
  3. Wypisz luckyNumber, a następnie greeting.

Naciśnij Uruchom kod: dane wyjściowe pokazują 7 i Hello, Luau!.

Spróbuj swoich sił

-- 1) identity<T>(value: T): T
-- 2) luckyNumber i greeting z wywołań identity
-- 3) wypisz obie wartości

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online