Курс языка программирования 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)

Комментарии

  1. add не меняет ни один из векторов: он конструирует и возвращает совершенно новый Vector из сложенных компонент.

  2. Обратите внимание, что Vector используется внутри собственного определения — и как тип параметра Vector $v, и в Vector.new. Это совершенно нормально: имя типа известно с момента начала его объявления, поэтому класс волен ссылаться на себя в своих же методах. Никакого предварительного объявления не требуется.

  3. put превращает свой аргумент в строку методом Str, поэтому на экран попадает пользовательское форматирование "($.x, $.y)".

Навигация по курсу

Сложение векторов   |   Говорящие животные