Das funktionale Potenzial von Rust erkunden

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 untersuchen wir Higher-Order-Funktionen (HOFs) in Rust, das sind Funktionen, die eine oder mehrere Funktionen akzeptieren und/oder eine nützlichere Funktion erzeugen, und wie sie in Kombination mit lazy Iterators verwendet werden können, um Rust einen funktionalen Geschmack zu verleihen.

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

Higher Order Functions

Rust bietet Higher Order Functions (HOF). Dies sind Funktionen, die eine oder mehrere Funktionen akzeptieren und/oder eine nützlichere Funktion erzeugen. HOFs und lazy Iterators verleihen Rust seinen funktionalen Geschmack.

fn is_odd(n: u32) -> bool {
    n % 2 == 1
}

fn main() {
    println!("Find the sum of all the squared odd numbers under 1000");
    let upper = 1000;

    // Imperative approach
    // Declare accumulator variable
    let mut acc = 0;
    // Iterate: 0, 1, 2,... to infinity
    for n in 0.. {
        // Square the number
        let n_squared = n * n;

        if n_squared >= upper {
            // Break loop if exceeded the upper limit
            break;
        } else if is_odd(n_squared) {
            // Accumulate value, if it's odd
            acc += n_squared;
        }
    }
    println!("imperative style: {}", acc);

    // Functional approach
    let sum_of_squared_odd_numbers: u32 =
        (0..).map(|n| n * n)                             // All natural numbers squared
            .take_while(|&n_squared| n_squared < upper) // Below upper limit
            .filter(|&n_squared| is_odd(n_squared))     // That are odd
            .sum();                                     // Sum them
    println!("functional style: {}", sum_of_squared_odd_numbers);
}

Option und Iterator implementieren ihren fairen Anteil an HOFs.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Higher Order Functions Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.