Menu
Coddy logo textTech

Składnia z dwukropkiem

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 3 z 70.

Wpisywanie counter.increment(counter) za każdym razem jest uciążliwe i podatne na błędy. Lua oferuje prostszy sposób: operator dwukropka (:).

Gdy definiujesz funkcję za pomocą dwukropka, Lua automatycznie dodaje self jako pierwszy parametr:

local player = {
    name = "Hero"
}

-- Użycie dwukropka w definicji
function player:greet()
    print("Hello, I am " .. self.name)
end

Dwukropek działa również przy wywoływaniu funkcji. Automatycznie przekazuje tabelę jako pierwszy argument:

player:greet()  -- Wynik: Hello, I am Hero

Jest to równoważne zapisaniu player.greet(player), ale znacznie czytelniejsze. Dwukropek obsługuje parametr self po obu stronach: podczas definiowania i wywołania.

Oto porównanie pokazujące, że oba podejścia dają identyczne wyniki:

local counter = { value = 0 }

-- Składnia z kropką (jawne self)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- Składnia z dwukropkiem (automatyczne self)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

Składnia z dwukropkiem to standardowy sposób definiowania i wywoływania metod w Lua. Dzięki niej kod jest krótszy i mniej powtarzalny.

challenge icon

Wyzwanie

Łatwy

Utwórz tabelę o nazwie greeter z polem message zainicjalizowanym wartością, którą otrzymasz jako dane wejściowe.

Dodaj metodę :sayHello(name) przy użyciu składni dwukropkowej, która wypisuje powitanie w tym formacie:

[message], [name]!

Otrzymasz dwa dane wejściowe:

  1. Wiadomość powitalną, którą należy zapisać w greeter.message
  2. Imię, które należy przekazać do metody :sayHello()

Zdefiniuj metodę przy użyciu składni dwukropkowej i wywołaj ją, również używając składni dwukropkowej. Wypisz sformatowane powitanie.

Na przykład, jeśli wiadomość to Welcome, a imię to Luna, wynikiem powinno być:

Welcome, Luna!

Spróbuj swoich sił

-- Odczytaj dane wejściowe
local message = io.read()
local name = io.read()

-- TODO: Napisz swój kod poniżej
-- 1. Utwórz tabelę o nazwie 'greeter' z polem 'message'
-- 2. Dodaj metodę :sayHello(name), używając składni z dwukropkiem
-- 3. Wywołaj metodę, używając składni z dwukropkiem, aby wypisać powitanie
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online