Проектная лаборатория
Собственный интерпретатор
Этап 77 · Классы
Вызовы конструкторов
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку конструкторов в свой интерпретатор Lox. В Lox конструктор — это метод с именем init(), который автоматически вызывается при создании экземпляра класса.
Ссылка на книгу
Код для этого этапа реализован в разделе 12.7: Конструкторы и инициализаторы.
Проверки
Тестирующая система выполнит серию проверок с файлами test.lox, содержащими определения и вызовы конструкторов.
Например, если test.lox содержит следующее:
class Default {
init() {
this.x = "bar";
this.y = 91;
}
}
print Default().x;
print Default().y;Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh run test.lox
bar
91Тестирующая система выполнит несколько таких проверок с конструкторами в разных контекстах, например:
Тестовый случай 1:
Входные данные:
class Robot {
init(model, function) {
this.model = model;
this.function = function;
}
}
print Robot("R2-D2", "Astromech").model;Ожидаемый вывод:
R2-D2Тестовый случай 2:
Входные данные:
class Counter {
init(startValue) {
if (startValue < 0) {
print "startValue can't be negative";
this.count = 0;
} else {
this.count = startValue;
}
}
}
var instance = Counter(-52);
print instance.count;
print instance.init(52).count;Ожидаемый вывод:
startValue can't be negative
0
52Тестовый случай 3:
Входные данные:
class Vehicle {
init(type) {
this.type = type;
}
}
class Car {
init(make, model) {
this.make = make;
this.model = model;
this.wheels = "four";
}
describe() {
print this.make + " " + this.model +
" with " + this.wheels + " wheels";
}
}
var vehicle = Vehicle("Generic");
print "Generic " + vehicle.type;
var myCar = Car("Toyota", "Corolla");
myCar.describe();Ожидаемый вывод:
Generic Generic
Toyota Corolla with four wheelsТестирующая система проверит, что ваша программа корректно обрабатывает конструкторы, включая:
- Автоматический вызов метода
init()при создании экземпляра класса. - Корректную передачу аргументов конструктора.
- Установку свойств экземпляра в конструкторе.
Примечания
- Метод
init()можно вызывать явно, как и любой другой метод - Этот формат вывода соответствует спецификации в репозитории книги
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init interpreter ./my-interpreter --language go2. Откройте папку в IDE
cd ./my-interpreterРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage ou5Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.