Menu
Coddy logo textTech

Синтаксис с двоеточием

Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 3 из 70.

Писать counter.increment(counter) каждый раз утомительно и чревато ошибками. Lua предоставляет более удобный способ: оператор colon (:).

Когда вы определяете function using двоеточие, Lua автоматически добавляет self в качестве первого параметра:

local player = {
    name = "Hero"
}

-- Использование двоеточия в определении
function player:greet()
    print("Hello, I am " .. self.name)
end

Двоеточие также работает при вызове функции. Оно автоматически передаёт table в качестве первого аргумента:

player:greet()  -- Вывод: Hello, I am Hero

Это эквивалентно записи player.greet(player), но гораздо чище. Двоеточие обрабатывает параметр self с обеих сторон: при определении и при вызове.

Вот сравнение, показывающее, что оба подхода дают одинаковые результаты:

local counter = { value = 0 }

-- Синтаксис с точкой (явный self)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- Синтаксис с двоеточием (автоматический self)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

Синтаксис с двоеточием — стандартный способ определять и вызывать методы в Lua. Он делает ваш код короче и менее повторяющимся.

challenge icon

Задание

Легко

Создайте table с именем greeter и полем message, инициализированным значением, которое вы получите в качестве input.

Добавьте method :sayHello(name), используя синтаксис colon, который выводит greeting в следующем формате:

[message], [name]!

Вы получите два значения input:

  1. Сообщение greeting, которое нужно сохранить в greeter.message
  2. Имя, которое нужно передать в method :sayHello()

Определите method, используя синтаксис colon, и вызовите его, используя синтаксис colon. Выведите отформатированное greeting.

Например, если message — Welcome, а имя — Luna, результатом должно быть:

Welcome, Luna!

Попробуйте сами

-- Прочитать ввод
local message = io.read()
local name = io.read()

-- TODO: Напишите ваш код ниже
-- 1. Создайте таблицу с именем 'greeter' с полем 'message'
-- 2. Добавьте метод :sayHello(name), используя синтаксис с двоеточием
-- 3. Вызовите метод, используя синтаксис с двоеточием, чтобы вывести приветствие
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Lua