Информация о счете
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 23 из 70.
Задание
ЛегкоВаш Цифровой Банк становится более профессиональным! Теперь давайте сделаем так, чтобы ваши счета красиво отображались при выводе на печать. Добавив метаметод __tostring, вы сможете точно контролировать, как выглядит счет — показывая как ID счета, так и текущий баланс в чистом, читаемом формате.
Вы продолжите работу над существующими файлами:
Account.lua: Расширьте свой класс Account двумя новыми функциями:- Измените конструктор
:new(), чтобы он принимал параметрid, который идентифицирует каждый счет - Добавьте метаметод
__tostring, который возвращает отформатированную строку с информацией о счете
- Измените конструктор
main.lua: Создайте счета с ID и продемонстрируйте, как они отображаются при печати.
Метод __tostring должен возвращать строку именно в таком формате:
Account [ID]: Balance = BALANCEГде ID — это идентификатор счета, а BALANCE — текущий баланс.
Вы получите четыре входных значения:
- ID первого счета
- Сумма депозита для первого счета
- ID второго счета
- Сумма депозита для второго счета
В основном файле создайте два счета с указанными ID, внесите соответствующие суммы на каждый из них, а затем распечатайте каждый счет напрямую с помощью print(). Метаметод __tostring будет автоматически вызван при печати объекта счета.
Например, если входные данные — 1001, 500, 1002 и 750, вывод должен быть следующим:
Account [1001]: Balance = 500
Account [1002]: Balance = 750Теперь каждый счет имеет уникальный идентификатор и может четко описывать себя — гораздо более профессиональный банковский опыт!
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать четыре входных значения
local id1 = io.read()
local deposit1 = tonumber(io.read())
local id2 = io.read()
local deposit2 = tonumber(io.read())
-- Создать два аккаунта с ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Внести соответствующие суммы
account1:deposit(deposit1)
account2:deposit(deposit2)
-- Вывести каждый аккаунт (использует __tostring)
print(account1)
print(account2)
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua