Курс языка программирования Raku / Приложение 🆕 / Типы и текстовые машины / Объекты и классы / Exercises / Сложение векторов
Решение: Сложение векторов
Вот один из возможных вариантов решения задачи.
Код
class Vector {
has $.x;
has $.y;
method add(Vector $v) {
Vector.new(x => $.x + $v.x, y => $.y + $v.y);
}
method Str { "($.x, $.y)" }
}
my $sum = Vector.new(x => 1, y => 2).add(Vector.new(x => 3, y => 4));
put $sum;🦋 Исходный код можно найти в файле vector-add.raku.
Вывод
(4, 6)Комментарии
addне меняет ни один из векторов: он конструирует и возвращает совершенно новыйVectorиз сложенных компонент.Обратите внимание, что
Vectorиспользуется внутри собственного определения — и как тип параметраVector $v, и вVector.new. Это совершенно нормально: имя типа известно с момента начала его объявления, поэтому класс волен ссылаться на себя в своих же методах. Никакого предварительного объявления не требуется.putпревращает свой аргумент в строку методомStr, поэтому на экран попадает пользовательское форматирование"($.x, $.y)".