Closures als Funktionsparameter

Beginner

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

Einführung

In diesem Lab lernst du, wie Funktionen Closures als Parameter akzeptieren können, was es ermöglicht, jede Funktion, die die Merkmalsbindung des Closures erfüllt, als Argument zu verwenden. Die Fn, FnMut und FnOnce Merkmale bestimmen, wie ein Closure Variablen aus dem umgebenden Bereich aufnimmt.

Hinweis: Wenn das Lab keinen Dateinamen angibt, kannst du einen beliebigen Dateinamen verwenden. Beispielsweise kannst du main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.

Eingabefunktionen

Da Closures als Argumente verwendet werden können, möchtest du vielleicht wissen, ob das auch für Funktionen gilt. Und tatsächlich kann man das sagen! Wenn du eine Funktion deklarierst, die ein Closure als Parameter nimmt, dann kann jede Funktion, die die Merkmalsbindung dieses Closures erfüllt, als Parameter übergeben werden.

// Definiere eine Funktion, die ein generisches `F`-Argument annimmt,
// das durch `Fn` begrenzt ist, und rufe es auf
fn call_me<F: Fn()>(f: F) {
    f();
}

// Definiere eine Umhüllungsfunktion, die die `Fn`-Begrenzung erfüllt
fn function() {
    println!("Ich bin eine Funktion!");
}

fn main() {
    // Definiere ein Closure, das die `Fn`-Begrenzung erfüllt
    let closure = || println!("Ich bin ein Closure!");

    call_me(closure);
    call_me(function);
}

Als zusätzliche Bemerkung bestimmen die Fn, FnMut und FnOnce-Merkmale, wie ein Closure Variablen aus dem umgebenden Bereich aufnimmt.

Zusammenfassung

Herzlichen Glückwunsch! Du hast das Lab "Eingabefunktionen" abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.