Menu
Coddy logo textTech

Добавление методов в структуры

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

Из главы об ООП в Lua ты знаешь, что таблицы могут содержать функции, как и любые другие значения. Формы также могут описывать эти поля-функции, превращая форму в небольшой контракт данных и поведения.

Поле-метод использует синтаксис типа function, который ты изучил в главе о функциях. Его первый параметр обычно называется self — это таблица, которой принадлежит метод, — и форма даже может ссылаться на саму себя:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

Чтобы реализовать форму, сохрани функцию в этом поле и передай ей параметр self:

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

Вызвать её означает самостоятельно передать таблицу как self: greeter.greet(greeter). С помощью self метод читает поля той таблицы, для которой он был вызван.

Записывать таблицу дважды кажется неудобным, и ты уже знаешь решение Lua: двоеточие. В следующем уроке синтаксис : будет связан с этими типизированными формами.

challenge icon

Задание

Легко

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

  • width типа number
  • height типа number
  • area: метод (self: Rectangle) -> number, возвращающий width * height
  • perimeter: метод (self: Rectangle) -> number, возвращающий 2 * (width + height)

Создай переменную rect типа Rectangle со значениями width 4, height 6 и реализацией обоих методов (не забудь параметр self).

Выведи каждое значение в отдельной строке (вызови методы с помощью точечного синтаксиса, передав rect как self):

  1. площадь прямоугольника
  2. периметр прямоугольника
  3. ширину прямоугольника

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

-- Напишите код здесь
-- 1) определите тип Rectangle с двумя числовыми полями и двумя методами
-- 2) создайте rect (width 4, height 6), реализующий оба метода
-- 3) выведите area, perimeter и width
quiz iconПроверьте себя

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

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

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