探索 Rust 的函数式能力

Beginner

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

简介

在本实验中,我们将探索 Rust 中的高阶函数(HOF),即接受一个或多个函数和/或生成更有用函数的函数,以及如何将它们与惰性迭代器结合使用,赋予 Rust 一种函数式风格。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,通过 rustc main.rs &&./main 进行编译和运行。

高阶函数

Rust 提供了高阶函数(HOF)。这些函数接受一个或多个函数,和/或生成一个更有用的函数。高阶函数和惰性迭代器赋予了 Rust 函数式风格。

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;

    // 命令式方法
    // 声明累加器变量
    let mut acc = 0;
    // 迭代:0, 1, 2,... 直到无穷大
    for n in 0.. {
        // 对数字进行平方
        let n_squared = n * n;

        if n_squared >= upper {
            // 如果超过上限则中断循环
            break;
        } else if is_odd(n_squared) {
            // 如果是奇数,则累加值
            acc += n_squared;
        }
    }
    println!("命令式风格:{}", acc);

    // 函数式方法
    let sum_of_squared_odd_numbers: u32 =
        (0..).map(|n| n * n)                             // 所有自然数的平方
            .take_while(|&n_squared| n_squared < upper) // 低于上限
            .filter(|&n_squared| is_odd(n_squared))     // 是奇数的
            .sum();                                     // 求和
    println!("函数式风格:{}", sum_of_squared_odd_numbers);
}

OptionIterator 实现了相当数量的高阶函数。

总结

恭喜你!你已经完成了高阶函数实验。你可以在 LabEx 中练习更多实验来提升你的技能。