Closures als Funktionsparameter

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99326{{"Closures als Funktionsparameter"}} rust/function_syntax -.-> lab-99326{{"Closures als Funktionsparameter"}} rust/expressions_statements -.-> lab-99326{{"Closures als Funktionsparameter"}} rust/lifetime_specifiers -.-> lab-99326{{"Closures als Funktionsparameter"}} rust/operator_overloading -.-> lab-99326{{"Closures als Funktionsparameter"}} end

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.