Generyczna funkcja identycznościowa
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 58 z 73.
Oto poprawnie napisana 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 rzeczywistego typu: parametr jest typu T, a funkcja zwraca wartość typu T.
Cały trik polega na użyciu tego same T dla wejścia i wyjścia. Wiąże je ze sobą. Wywołaj identity("hello"), a weryfikator typów określi T = string dla tego wywołania, więc wynikiem będzie wartość typu string. Wywołaj identity(42), a T = number, więc wynikiem będzie wartość typu number. Jedno ciało funkcji, każdy typ, niczego nie tracisz.
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 istnieją tylko na potrzeby weryfikatora typów: w czasie działania jest to zwykła funkcja Lua function identity(value) return value end.
Wyzwanie
ŁatwyUtwórz funkcję generyczną o nazwie identity, która:
- deklaruje parametr typu
T - przyjmuje jeden parametr o nazwie
valuetypuT - zwraca tę wartość, a jej typem zwracanym jest
T
Następnie utwórz następujące zmienne o określonych typach, używając swojej funkcji:
luckyNumbertypunumber: wywołajidentityz argumentem7greetingtypustring: wywołajidentityz argumentem"Hello, Luau!"isReadytypuboolean: wywołajidentityz argumentemtrue
Wypisz poniższe elementy, każdy w osobnym wierszu:
luckyNumbergreetingisReady- wynik bezpośredniego wywołania
identityz argumentem"<code>generics" wewnątrzprint - wynik bezpośredniego wywołania
identityz argumentem99wewnątrzprint
Spróbuj swoich sił
-- Napisz kod tutaj
-- 1) zdefiniuj identity<T>(value: T): T
-- 2) utwórz luckyNumber, greeting i isReady za pomocą wywołań identity
-- 3) wypisz je, a następnie wypisz identity(dokładny tekst z instrukcji) i identity(99)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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 niczego nie zwracająceParametry opcjonalneDomyślne wartości parametrówFunkcje wariadyczneDefiniowanie typów funkcjiPodsumowanie: funkcje z typami2Typy podstawowe
Typy podstawowe: num, str, boolTyp „any”: furtka awaryjnaTyp „unknown”Typy Nil i opcjonalneInferencja typów w praktyceJawne adnotacje typówPowtórka: ćwiczenie typów podstawowych5Aliasy, 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
Tablice typowaneDodawanie i odczytywanie elementówCzym jest typ mapy?Deklarowanie map i dostęp do nichIterowanie po tabelachTabele o mieszanej strukturzeWielowymiarowe tablice typowanetable.unpack i varargsPodsumowanie: 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