INTERACTIVE LAB

rustVIP语法与所有权 · 第 6/6 篇 4 个可运行示例0 次浏览 更新于 2026-09-28

Rust:闭包

学习 Rust 闭包的基本写法、捕获规则、参数接收与代码简化技巧。

前言

闭包在rust中非常常见,在前面多线程开发章节中我相信大家已经见识到,所以这里有必要对其进行详解介绍,

Rust中的闭包和C++中的lambda表达式很像,它是一个可以保存在一个变量、或者作为一个参数传递给其它函数的匿名函数。

与普通函数的不同之处在于,它可以捕获所在作用域中的值。

简单使用

一个最简单的用例如下:

rust
待运行⌘↵
fn main() {
    let f = |a: i32, b: i32| -> i32 {
        return a + b;
    };
    let sum=f(10,20);
    println!("{}",sum);
}
编辑仅保存在本页,刷新后恢复

注意闭包的基本形式为:||{}。

其中||中放置参数,||与{}之间放置返回值,而{}内则放置执行语句。

这样看起来,闭包似乎除了可以随用随写、能将其赋值到一个变量身上外,也没有其它特别之处了,就和普通函数差不多。

但这只是最原始的写法,为的是让大家方便与函数进行对照,这种写法在正常代码中并不常见。

毕竟我们用闭包的原因就是图它的简便,如果每次用闭包也要这么麻烦的话,那还不如用函数了。

闭包简化

首先是参数类型,由于我们闭包一般都是随写随用,所以rust编译器是能够根据后面代码的使用来自动推断出参数类型的,所以大多数时候我们都不必写参数类型:

image-20231217141645612

然后是返回值,根据闭包函数体的返回值,它同样能推测出返回值类型,所以大多数时候依旧不用写。

不过这里要分清两种写法:闭包当然可以使用return,它结束的是这次闭包调用,返回值就是闭包的结果,不会直接返回外层函数(除非你在外层函数体里写return)。只是大多数时候直接把最后一个表达式作为结果更简洁:

rust
待运行⌘↵
fn main() {
    let add = |a: i32, b: i32| {
        return a + b;
    };
    println!("{}", add(1, 2));
}
编辑仅保存在本页,刷新后恢复
该实验为 VIP 专享内容,
请开通后继续阅读后续 70% 并运行完整示例~

DISCUSSION

评论 0

还没有评论,来留下第一条吧。