Menu
Coddy logo textTech

setmetatable i getmetatable

Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 17 z 54.

Teraz, gdy rozumiesz już, czym koncepcyjnie są metatabele, czas nauczyć się, jak faktycznie z nimi pracować. Lua udostępnia do tego dwie podstawowe funkcje: setmetatable(), aby przypisać metatabelę do tabeli, oraz getmetatable(), aby ją pobrać.

Aby przypisać metatabelę do tabeli, użyj setmetatable(). Ta funkcja przyjmuje dwa argumenty: tabelę, którą chcesz zmodyfikować (główną tabelę), oraz metatabelę, którą chcesz do niej przypisać:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

W tym przykładzie myMetatable jest teraz dołączona do myTable. Sama metatablica jest na razie pusta, ale ustanawia to połączenie między tymi dwiema tablicami. Funkcja setmetatable() zwraca również główną tablicę, co pozwala w razie potrzeby łączyć operacje.

Aby pobrać metatabelę przypisaną do tabeli, użyj getmetatable():

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Wynik: true

Ta funkcja zwraca metatablicę, jeśli została przypisana, albo nil, jeśli tablica nie ma metatablicy. Jest to przydatne, gdy chcesz sprawdzić lub zmodyfikować metatablicę tablicy po jej ustawieniu.

Zrozumienie tych dwóch funkcji stanowi podstawę pracy z metatabelami w Lua. Gdy nauczysz się dołączać i pobierać metatabele, będziesz gotowy definiować metametody zmieniające zachowanie twoich tabel.

challenge icon

Wyzwanie

Łatwy

Napisz funkcję attachMetatable, która przyjmuje mainTable i metaTable oraz zwraca true, jeśli metatabela została pomyślnie dołączona.

Użyj setmetatable(), aby dołączyć metatabelę do głównej tabeli, a następnie sprawdź dołączenie za pomocą getmetatable().

Logika:

  • Dołącz metaTable do mainTable za pomocą setmetatable()
  • Pobierz dołączoną metatabelę za pomocą getmetatable()
  • Porównaj pobraną metatabelę z oryginalną metaTable
  • Zwróć true, jeśli są zgodne, a w przeciwnym razie false

Parametry:

  • mainTable (tabela): Tabela, do której zostanie dołączona metatabela
  • metaTable (tabela): Metatabela do dołączenia

Zwraca: true, jeśli metatabela została pomyślnie dołączona i zweryfikowana, a w przeciwnym razie false (wartość logiczna)

Spróbuj swoich sił

function attachMetatable(mainTable, metaTable)
    -- Wpisz tutaj kod
end
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Lua online