Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Ein- und Ausgabe / Datei-Handles / Exercises / Übergeben Sie ein Handle an eine Funktion
Lösung: Übergeben Sie ein Handle an eine Funktion
Hier ist eine mögliche Lösung der Aufgabe.
Code
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';🦋 Du findest den Quellcode in der Datei pass-a-handle.raku.
Ausgabe
started
working
doneKommentare
Der von
opengelieferte Handle ist einfach ein Wert in$fh, er kann also wie jede Zeichenkette oder Zahl als Argument anlog-lineübergeben werden. Innerhalb der Subroutine schreibt$fh.saydurch denselben offenen Handle.Weil der Handle über alle drei Aufrufe hinweg offen bleibt, hängt jedes
log-lineeine weitere Zeile an dieselbe Datei an.closeschreibt dann alles weg, undslurpliest die drei Zeilen zurück.Das macht Handles kombinierbar: Eine Funktion kann einen Handle aufnehmen und hineinschreiben (oder daraus lesen), ohne sich darum zu kümmern, auf welche Datei er zeigt — das entscheidet der Aufrufer, wenn er die Datei öffnet.
Kursnavigation
← Übergeben Sie ein Handle an eine Funktion | Quiz — Zeilen lesen →