Curso de Raku / Objetos, entrada/salida y excepciones / Entrada y salida / Manejadores de archivo / Exercises / Pase un manejador a una función
Solución: Pase un manejador a una función
Aquí tienes una posible solución para la tarea.
Código
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';🦋 Puedes encontrar el código fuente en el archivo pass-a-handle.raku.
Salida
started
working
doneComentarios
El manejador que devuelve
openes solo un valor guardado en$fh, así que puede pasarse alog-linecomo argumento igual que cualquier cadena o número. Dentro de la subrutina,$fh.sayescribe a través de ese mismo manejador abierto.Como el manejador sigue abierto durante las tres llamadas, cada
log-lineañade otra línea al mismo archivo.closevuelca entonces todo, yslurpvuelve a leer las tres líneas.Esto es lo que hace componibles a los manejadores: una función puede aceptar un manejador y escribir en él (o leer de él) sin importarle a qué archivo apunta; eso lo decide quien la llama al abrir el archivo.