Проектная лаборатория
Собственный интерпретатор
Этап 75 · Классы
Ключевое слово this
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку ключевого слова this в свой интерпретатор Lox. Ключевое слово this позволяет методам обращаться к экземпляру, для которого они вызваны, обеспечивая полноценное объектно-ориентированное программирование.
Ссылка на книгу
Код для этого этапа реализован в разделе 12.6: this.
Проверки
Тестирующая система выполнит серию проверок с файлами test.lox, использующими ключевое слово this в различных контекстах.
Например, если test.lox содержит следующее:
class Spaceship {
identify() {
print this;
}
}
Spaceship().identify();Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh run test.lox
Spaceship instanceТестирующая система выполнит несколько таких проверок с this в разных контекстах, например:
Тестовый случай 1:
Входные данные:
class Calculator {
add(a, b) {
return a + b + this.memory;
}
}
var calc = Calculator();
calc.memory = 82;
print calc.add(92, 1);Ожидаемый вывод:
175Тестовый случай 2:
Входные данные:
class Animal {
makeSound() {
print this.sound;
}
identify() {
print this.species;
}
}
var dog = Animal();
dog.sound = "Woof";
dog.species = "Dog";
var cat = Animal();
cat.sound = "Meow";
cat.species = "Cat";
// Swap methods between instances
cat.makeSound = dog.makeSound;
dog.identify = cat.identify;
cat.makeSound();
dog.identify();Ожидаемый вывод:
Woof
CatТестовый случай 3:
Входные данные:
class Wizard {
getSpellCaster() {
fun castSpell() {
print this;
print "Casting spell as " + this.name;
}
return castSpell;
}
}
var wizard = Wizard();
wizard.name = "Merlin";
wizard.getSpellCaster()();Ожидаемый вывод:
Wizard instance
Casting spell as MerlinТестирующая система проверит, что ваша программа корректно обрабатывает ключевое слово this, включая:
- Обращение к экземпляру в методах.
- Доступ к свойствам экземпляра через
this. - Сохранение правильной привязки
thisпри передаче методов.
Примечания
- При вызове метода
thisдолжен быть связан с экземпляром, для которого вызван метод - Привязка
thisдолжна сохраняться даже при передаче методов как значений первого класса - Форматы вывода на этом этапе соответствуют форматам в репозитории книги
Проверка в вашей 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 yd7Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.