Menu
Coddy logo textTech

Typy przekroju

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

Typy sumy mówią, że wartość jest jednego typu lub innego. Typy przecięcia wskazują odwrotną zależność: ampersand & łączy kształty tabel w typ, który ma wszystkie pola każdej części:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- Person musi mieć OBA pola
local user: Person = {
    name = "Alice",
    age = 25,
}

Pomiń age, a weryfikator zgłosi błąd: przecięcie oznacza „i”, nigdy wybór dowolnych elementów. Dzięki temu możesz budować duże kształty z małych, wielokrotnego użytku części: definiuj wyspecjalizowane typy dla osobnych zagadnień, a następnie łącz je w razie potrzeby:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Ważna uwaga dotycząca Luau: łącz przez przecięcie kształty tabel (i typy funkcji), a nie typy proste. Coś takiego jak number & string nie ma sensu, ponieważ żadna wartość nie może być jednocześnie jednym i drugim. Gdy chcesz uzyskać „ten kształt plus tamten kształt”, & jest właściwym narzędziem.

Oczywiście w czasie działania Person to po prostu zwykła tabela Lua: przecięcie istnieje tylko na potrzeby weryfikatora.

challenge icon

Wyzwanie

Łatwy

Utwórz dwa aliasy kształtów: HasName z polem name: string oraz HasAge z polem age: number.

Utwórz Person jako przecięcie HasName & HasAge.

Utwórz HasEmail z polem email: string oraz Employee jako przecięcie wszystkich trzech: HasName & HasAge & HasEmail.

Zadeklaruj:

  • user: Person z imieniem "Alice" i wiekiem 25
  • worker: Employee z imieniem "Bob", wiekiem 30 i adresem e-mail "bob@company.com"

Utwórz displayPerson(person: Person): string, zwracającą "Name: [name], Age: [age]", oraz displayEmployee(employee: Employee): string, zwracającą "Name: [name], Age: [age], Email: [email]".

Wyświetl displayPerson(user) i displayEmployee(worker) w osobnych wierszach.

Spróbuj swoich sił

-- Napisz kod tutaj
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- zadeklaruj user i worker, napisz dwie funkcje wyświetlające,
-- wyświetl wynik displayPerson(user) i displayEmployee(worker)
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online