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.
Wyzwanie
ŁatwyNapisz jedną funkcję, która zwraca dowolną wartość z zachowaniem jej typu.
- Napisz
local function identity<T>(value: T): T, która zwracavalue. - Zadeklaruj
local luckyNumber: number = identity(7)orazlocal greeting: string = identity("Hello, Luau!"). - Wypisz
luckyNumber, a następniegreeting.
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
1Pierwsze kroki z Luau
Czym jest Luau?Dlaczego warto używać Luau?Twój pierwszy kod w LuauSprawdzanie typów i tryby błędówPodsumowanie: Wprowadzenie do Luau4Praca z funkcjami
Typowanie parametrów i wartości zwracanychTypowanie funkcji anonimowychFunkcje niezwracające wartościParametry opcjonalneDomyślne wartości parametrówWartości domyślne dla typów BooleanFunkcje wariadyczneDefiniowanie typów funkcjiPodsumowanie: funkcje z typami2Podstawowe typy
Number, String i BooleanTyp 'any': wyjście awaryjneTyp 'unknown'Nil i typy opcjonalneInferencja typów w praktyceJawne adnotacje typówPowtórka: ćwiczenia z podstawowych typów5Aliasy, typy sumy i przekroju
Aliasy typów dla typów prostychTypy sumyPraca z typami sumyTypy literałoweTypy przekrojuŁączenie aliasów typówPodsumowanie: zaawansowane kombinacje typów3Typowane tabele: tablice i mapy
Typowane tabliceDodawanie i odczytywanie elementówCzym jest typ mapy?Deklarowanie i uzyskiwanie dostępu do mapIterowanie po tabelachTabele o mieszanej strukturzeOdczytywanie siatkiTworzenie siatkitable.unpackPodsumowanie: tablice i mapy6Typowanie kształtów tabel
Adnotacje kształtów w miejscuAliasy typów dla kształtówWłaściwości opcjonalneKształty a luźne tabeleRozszerzanie kształtówDodawanie metod do kształtówSelf i metody z dwukropkiemPodsumowanie: definiowanie kształtów tabel9Typy generyczne: pierwsze spojrzenie
Problem, który rozwiązują typy generyczneGeneryczna funkcja identycznościowaKorzystanie z funkcji generycznejTablice generyczneGeneryczne aliasy typówPodsumowanie: funkcje generycznePoćwicz samodzielnie: Kompilator Luau online