Курс по Raku / Обекти, вход-изход и изключения / Вход и изход / Стандартни потоци / Exercises / Изход и грешки

Решение: Изход и грешки

Ето едно възможно решение на задачата.

Код

my @data = 3, 5, 7;

my $sum = 0;
for @data -> $n {
    $sum += $n;
    $*ERR.say("running total: $sum");
}

$*OUT.say($sum);

🦋 Намерете програмата във файла output-and-error.raku.

Изход

На екрана се появяват и двата потока — междинните суми, после крайният резултат:

running total: 3
running total: 8
running total: 15
15

Ако стандартната грешка бъде отхвърлена, остава само истинският изход:

$ raku output-and-error.raku 2>/dev/null
15

Коментари

  1. $*OUT и $*ERR са манипулаторите за стандартния изход и стандартната грешка. Всеки има свой собствен метод say.

  2. Всяко преминаване през цикъла добавя следващото число и записва междинната сума в $*ERR; само крайната сума отива в $*OUT. На екрана напредъкът и резултатът изглеждат еднакво, но пътуват през различни потоци — затова пренасочването на стандартната грешка настрани с 2>/dev/null оставя само крайното 15.

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

Изход и грешки   |   Предупреждение чрез note