Introdução
Neste laboratório, você aprenderá como funções podem receber closures como parâmetros, permitindo que qualquer função que satisfaça a restrição de tipo do closure seja usada como argumento. Os traits Fn, FnMut e FnOnce ditam como um closure captura variáveis do escopo envolvente.
Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar
main.rs, compilar e executar comrustc main.rs && ./main.
Funções de entrada
Como closures podem ser usadas como argumentos, você pode se perguntar se o mesmo pode ser dito sobre funções. E de fato pode! Se você declarar uma função que recebe uma closure como parâmetro, qualquer função que satisfaça a restrição de tipo dessa closure pode ser passada como parâmetro.
// Define uma função que recebe um argumento genérico `F`
// limitado por `Fn`, e a chama
fn call_me<F: Fn()>(f: F) {
f();
}
// Define uma função wrapper que satisfaz a restrição `Fn`
fn function() {
println!("Sou uma função!");
}
fn main() {
// Define uma closure que satisfaz a restrição `Fn`
let closure = || println!("Sou uma closure!");
call_me(closure);
call_me(function);
}
Como observação adicional, os traits Fn, FnMut e FnOnce ditam como uma closure captura variáveis do escopo envolvente.
Resumo
Parabéns! Você concluiu o laboratório de Funções de Entrada. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.