Menu
CoddyTech

Typy przekroju

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

Unie oznaczają, że wartość jest jednego lub drugiego typu. Typy przecięcia działają odwrotnie: 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 jednej z opcji. Dzięki temu możesz budować duże kształty z małych, wielokrotnego użytku elementów: definiuj wyspecjalizowane typy dla oddzielnych zagadnień, a następnie łącz je w razie potrzeby:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Ważna uwaga dotycząca Luau: stosuj przecięcie do kształtów tabel (i typów funkcji), a nie typów prostych. Coś takiego jak number & string nie ma sensu, ponieważ żadna wartość nie może być jednocześnie jednym i drugim typem. Gdy chcesz uzyskać „ten kształt plus tamten kształt”, użyj &.

Oczywiście w czasie wykonywania Person to po prostu zwykła tabela Lua: przecięcie istnieje wyłącznie na potrzeby weryfikatora.

challenge icon

Wyzwanie

Łatwy

Połącz dwie małe kształty w jeden.

  1. Napisz type HasName = {name: string}, type HasAge = {age: number} i type Person = HasName & HasAge.
  2. Utwórz local user: Person = {name = "Omar", age = 31}.
  3. Wyświetl `Name: {user.name}, Age: {user.age}`.

Naciśnij Uruchom kod: wynik pokazuje Name: Omar, Age: 31.

Spróbuj swoich sił

-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) wypisz wiersz z imieniem i wiekiem

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online