Курс Raku / Додаток 🆕 / Типи та текстові машини / Об’єкти та класи / Вправи / Додавання векторів

Розв’язання: Додавання векторів

Ось одне з можливих розв’язань задачі.

Код

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)".

Навігація курсом

Додавання векторів   |   Тварини, що говорять