前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust中的匿名函数与闭包

Rust中的匿名函数与闭包

作者头像
菩提树下的杨过
发布2021-11-24 10:02:18
1.4K0
发布2021-11-24 10:02:18
举报

一、匿名函数

语法:“|参数名| 语句”

参考下面的这个示例:

代码语言:javascript
复制
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let x = add(1, 2);
    println!("{}+{}={}", 1, 2, x);

    //匿名函数
    let add = |x, y| x + y;
    println!("{}+{}={}", 1, 2, add(1, 2));
}

可以看到,匿名函数不用刻意指定参数类型,rust会自动推断,匿名函数常用于精减代码,比如:

代码语言:javascript
复制
    let a = (1..10).filter(|x| (x % 2 == 0));
    for x in a{
        print!("{} ",x);
    }

这样就快速找出10以内的偶数。

二、闭包

rust中闭包本质就是一个匿名函数,它与函数最大的区别之一,在于闭包能捕获上下文环境中的变量

代码语言:javascript
复制
    let x = 12345;
    let t = || println! {"x={}",x};
    t();

x是在闭包语句之外定义的变量,但是闭包里仍可以访问,这是普通函数做不到的。

闭包还可以添加move关键字,强制将变量的所有权移动到闭包内,这样对于没有实现Copy trait的变量类型,闭包调用完成后,就无法再访问原来的变量了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档