Курс 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)Коментарі
addне змінює жодного з векторів; він конструює й повертає цілком новийVectorзі складених компонент.Зауважте, що
Vectorвикористано усередині його ж власного означення — як тип параметраVector $vта уVector.new. Це цілком нормально: ім’я типу відоме з тієї миті, коли починається його оголошення, тож клас вільно може посилатися на себе у власних методах. Жодного попереднього оголошення не потрібно.putперетворює свій аргумент на рядок за допомогою методуStr, тож з’являється саме власне форматування"($.x, $.y)".