Introducción
En este laboratorio, aprenderá cómo las funciones pueden tomar closures como parámetros, lo que permite que cualquier función que cumpla con el límite de trato del closure se utilice como argumento. Los rasgos Fn, FnMut y FnOnce dictan cómo un closure captura variables del ámbito envolvente.
Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar
main.rs, compilar y ejecutarlo conrustc main.rs &&./main.
Funciones de entrada
Dado que los closures pueden usarse como argumentos, es posible que te preguntes si lo mismo se puede decir de las funciones. ¡Y, de hecho, sí! Si declaras una función que tome un closure como parámetro, entonces cualquier función que cumpla con el límite de trato de ese closure puede pasarse como parámetro.
// Define una función que toma un argumento genérico `F`
// acotado por `Fn`, y lo llama
fn call_me<F: Fn()>(f: F) {
f();
}
// Define una función envolvente que satisface el límite `Fn`
fn function() {
println!("Soy una función!");
}
fn main() {
// Define un closure que satisface el límite `Fn`
let closure = || println!("Soy un closure!");
call_me(closure);
call_me(function);
}
Como nota adicional, los rasgos Fn, FnMut y FnOnce dictan cómo un closure captura variables del ámbito envolvente.
Resumen
¡Felicidades! Has completado el laboratorio de Funciones de Entrada. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.