Closures como Parâmetros de Função

Beginner

This tutorial is from open-source community. Access the source code

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 com rustc 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.