Курс по 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)".