Menu
CoddyTech

Problem, który rozwiązują typy generyczne

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

Wyobraź sobie, że potrzebujesz funkcji, która po prostu zwraca dowolną przekazaną jej wartość: funkcji tożsamościowej. Przy typach, które znasz do tej pory, masz dwie możliwości i obie są kiepskie.

Opcja pierwsza: napisać osobną kopię dla każdego typu. Treści funkcji są identyczne; różnią się tylko adnotacje:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

Każdy nowy typ oznacza kolejną kopię, a błąd poprawiony w jednej trzeba poprawić we wszystkich. To właśnie duplikowania chcesz uniknąć, pisząc funkcje.

Opcja druga: połączyć je w jedną funkcję z typem any:

local function echo(value: any): any
    return value
end

Teraz jedna funkcja obsługuje wszystko, ale ceną jest bezpieczeństwo typów. Gdy wywołujesz echo("hello"), moduł sprawdzający nie wie już, że wynikiem jest ciąg znaków. Zna tylko any, więc autouzupełnianie przestaje działać, a błędy typów umykają: gubi się powiązanie między tym, co zostało przekazane, a tym, co jest zwracane.

Tak naprawdę potrzebujesz funkcji, która działa dla każdego typu i pamięta, którego typu użyto przy każdym wywołaniu. Właśnie to zapewniają typy generyczne — i o nich jest ten rozdział.

challenge icon

Wyzwanie

Łatwy

Zobacz, o czym zapomina wersja any funkcji echo.

  1. Napisz local function echo(value: any): any, która zwraca value.
  2. Zapisz echo("hello") w local result.
  3. Wypisz result, a następnie typeof(result).

Naciśnij Run Code: wynik pokazuje hello i string.

Spróbuj swoich sił

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) wypisz result i typeof(result)

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online