Добавление методов в структуры
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 44 из 80.
Из главы о ООП в Lua ты знаешь, что таблицы могут содержать функции так же, как и любые другие значения. Фигуры тоже могут описывать эти поля-функции: превращая фигуру в небольшой контракт, описывающий данные и поведение.
Для поля-метода используется синтаксис типа функции, который ты изучил в главе о функциях. Его первый параметр по соглашению называется 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: двоеточие. В следующем уроке мы свяжем синтаксис : с этими типизированными фигурами.
Задание
ЛегкоДобавьте фигуре-прямоугольнику метод, который вычисляет её площадь.
- Напишите
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}. - Создайте
local rect: Rectangleс шириной4, высотой6иarea = function(self: Rectangle): number, возвращающейself.width * self.height. - Выведите
rect.area(rect), затемrect.width.
Нажмите Run Code: в выводе появятся 24 и 4.
Попробуйте сами
-- 1) тип Rectangle с полями width, height и методом area
-- 2) локальная переменная rect: Rectangle (width 4, height 6) с реализованным методом area
-- 3) вывести площадь, затем ширину
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображения6Типизация структуры таблиц
Встроенные аннотации структурПсевдонимы типов для структурНеобязательные свойстваСтруктурированные и произвольные таблицыРасширение структурДобавление методов в структурыМетоды с Self и двоеточиемИтоги: Определение структуры таблицПотренируйтесь самостоятельно: Онлайн-компилятор Luau