Menu
Coddy logo textTech

Методы с Self и двоеточием

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 43 из 73.

Запись rect.area(rect) работает, но ещё в разделе Lua OOP ты изучил лучший способ: colon. Вызов rect:area() полностью эквивалентен: Lua автоматически передаёт таблицу перед colon в качестве первого аргумента — self.

colon также помогает в месте определения. function account:deposit(amount) объявляет для тебя скрытый первый параметр с именем self:

type Account = {
    owner: string,
    balance: number,
    deposit: (self: Account, amount: number) -> (),
    getBalance: (self: Account) -> number,
}

local account = {owner = "Maya", balance = 1500}

function account:deposit(amount: number)
    self.balance += amount -- self является неявным
end

function account:getBalance(): number
    return self.balance
end

Обрати внимание, что форма явно объявляет selfexplicitly, deposit: (self: Account, amount: number) -> (), хотя colon скрывает его в реализации. colon — это синтаксический сахар; параметр всё равно существует, и тип явно его указывает. Метод, который ничего не возвращает, имеет тип с пустым возвращаемым значением -> ().

Вызов следует тому же правилу, которое ты уже знаешь: account:deposit(250) идентичен account.deposit(account, 250). Поведение во время выполнения такое же, как в главе об OOP: Luau просто добавляет типы.

challenge icon

Задание

Легко

Создайте псевдоним типа с именем Account, содержащий:

  • owner типа string
  • balance типа number
  • deposit: (self: Account, amount: number) -> ()
  • getBalance: (self: Account) -> number

Создайте таблицу account с owner "Maya" и balance 1500, затем присоедините оба метода, используя синтаксис определения с двоеточием (function account:deposit(amount: number) …). deposit добавляет amount к balance; getBalance возвращает текущее значение balance.

Используя вызовы с двоеточием:

  1. выведите balance
  2. выполните deposit 250
  3. снова выведите balance
  4. выведите owner

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

-- Напишите код здесь
-- 1) определите тип Account (методы принимают self явно в типе)
-- 2) создайте таблицу account, затем прикрепите deposit/getBalance с синтаксисом двоеточия
-- 3) выведите balance, deposit 250, выведите balance снова, выведите owner
quiz iconПроверьте себя

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

Все уроки раздела Введение в Luau

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