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

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

Събиране на вектори   |   Говорещи животни