Курс по Raku / Обекти, вход-изход и изключения / Вход и изход / Файлови манипулатори / Exercises / Подайте манипулатор на функция
Решение: Подайте манипулатор на функция
Ето едно възможно решение на задачата.
Код
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';🦋 Намерете програмата във файла pass-a-handle.raku.
Изход
started
working
doneКоментари
Манипулаторът, върнат от
open, е просто стойност, съхранена в$fh, така че може да бъде подаден наlog-lineкато аргумент, също като низ или число. Вътре в подпрограмата$fh.sayпише през същия отворен манипулатор.Понеже манипулаторът остава отворен през трите извиквания, всяко
log-lineдобавя още един ред към същия файл.closeслед това изтласква всичко, аslurpпрочита трите реда обратно.Именно това прави манипулаторите компонуеми: функцията може да приеме манипулатор и да пише в него (или да чете от него), без да се интересува към кой файл сочи — това решава извикващият, когато отваря файла.
Навигация в курса
← Подайте манипулатор на функция | Тест — Четене на редове →