Raku kurss / Objekti, ievade/izvade un izņēmumi / Ievade un izvade / Failu deskriptori / Exercises / Nododiet deskriptoru funkcijai

Risinājums: Nododiet deskriptoru funkcijai

Šeit ir iespējams risinājums uzdevumam.

Kods

sub log-line($fh, $message) {
    $fh.say($message);
}

my $fh = open 'log.txt', :w;
log-line($fh, 'started');
log-line($fh, 'working');
log-line($fh, 'done');
$fh.close;

print slurp 'log.txt';

🦋 Atrodiet programmu failā pass-a-handle.raku.

Izvade

started
working
done

Komentāri

  1. Turis, ko atgriež open, ir vienkārši vērtība, kas glabājas $fh, tāpēc to var padot log-line kā argumentu gluži tāpat kā jebkuru virkni vai skaitli. Apakšprogrammas iekšienē $fh.say raksta caur to pašu atvērto turi.

  2. Tā kā turis paliek atvērts visus trīs izsaukumus, katrs log-line pievieno tam pašam failam vēl vienu rindu. close tad visu izskalo, un slurp nolasa trīs rindas atpakaļ.

  3. Tieši tas padara turus komponējamus: funkcija var pieņemt turi un tajā rakstīt (vai no tā lasīt), nerūpējoties par to, uz kuru failu tas norāda, — to izlemj izsaucējs, kad failu atver.

Kursa navigācija

Nododiet deskriptoru funkcijai   |   Viktorīna — Rindu lasīšana