Rust中的匿名函数与闭包
一、匿名函数
语法:“|参数名| 语句”
参考下面的这个示例:
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会自动推断,匿名函数常用于精减代码,比如:
let a = (1..10).filter(|x| (x % 2 == 0));
for x in a{
print!("{} ",x);
}
这样就快速找出10以内的偶数。
二、闭包
rust中闭包本质就是一个匿名函数,它与函数最大的区别之一,在于闭包能捕获上下文环境中的变量
let x = 12345;
let t = || println! {"x={}",x};
t();
x是在闭包语句之外定义的变量,但是闭包里仍可以访问,这是普通函数做不到的。
闭包还可以添加move关键字,强制将变量的所有权移动到闭包内,这样对于没有实现Copy trait的变量类型,闭包调用完成后,就无法再访问原来的变量了。

Rust中的匿名函数与闭包的更多相关文章
- js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题)
js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题) 一.总结 需要好好看下面代码 本质是因为匿名函数用到了循环中的变量,而普通方式访问的话,匿名函数的访问在循环之后,所以得到的i是循环 ...
- php中的匿名函数和闭包(closure)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- 转:php中的匿名函数和闭包(closure)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- Golang中的匿名函数(闭包)
GO语言的匿名函数就是闭包,以下是<GO语言编程>中对闭包的解释 基本概念闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代 ...
- Go语言中的匿名函数和闭包的样子
1). 函数也是值,可以像普通值那样,传来传去: 2). 匿名函数: 3). 函数的类型,类似于:func(float64,float64) float64 ===================== ...
- js匿名函数和闭包总结
js匿名函数和闭包总结 一.总结 一句话总结:匿名函数的最主要作用是创建闭包,闭包就是将函数内部和函数外部连接起来的一座桥梁.内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕.闭包可以用 ...
- javascript进阶课程--第三章--匿名函数和闭包
javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...
- 【Go语言学习】匿名函数与闭包
前言 入坑 Go 语言已经大半年了,却没有写过一篇像样的技术文章,每次写一半就搁笔,然后就烂尾了. 几经思考,痛定思痛,决定金盆洗手,重新做人,哦不,重新开始写技术博文. 这段时间在研究Go语言闭包的 ...
- php中的匿名函数(Anonymous functions)和闭包函数(closures)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- [转]JavaScript中的匿名函数及函数的闭包
JavaScript中的匿名函数及函数的闭包 原文地址:http://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵 ...
随机推荐
- bootstrap4下拉菜单无法显示问题
刚才在菜鸟教程学习bootstrap4时在按钮组章节中遇到了下拉菜单,可是自己没有调试出来!!! 我把菜鸟的代码copy(全部)到本地发先可以运行!!! 找了半天原因,可能是自己导入的js文件有错!! ...
- pikachu靶场的详细搭建,附pikachu靶场源码下载链接
一.安装好phpstudy 首先搭建pikachu靶场的第一步,先是安装好phpstudy,这是一款集成环境的软件,里面包含了Apache,FTP,MySQL,Nginx.phpstudy的官方网址: ...
- Python基础 - 常用内置对象
数字.字符串.字节串.列表.元组.字典.集合.布尔型.空类型.异常.文件.可迭代对象.编程单元def.class.module 常量与变量 x = 3 type(x) # 查看变量类型 int typ ...
- C语言与汇编
C变量 C 语言是如何把各种类型的变量转换成对应的汇编语言呢? 高级语言更容易被工程师理解,而汇编语言这样的低级语言,则更容易被机器解读.这是因为汇编语言里的大部分内容都跟机器语言一一对应,你可以这样 ...
- 6 MyBatis动态SQL之choose(when、otherwise)语句
1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...
- 如何在Mac系统上把U盘分成2个区?
插入U盘后,使用命令行执行如下命令: diskutil partitionDisk /dev/disk8 GPT MS-DOS TESLAMUSIC 7% ExFAT TESLADRIVE 93% 第 ...
- 洛谷 P3792 由乃与大母神原型和偶像崇拜
洛谷 P3792 由乃与大母神原型和偶像崇拜 Problem 糖果屋的故事讲的就是韩赛尔和格雷特被继母赶出家里,因为没饭吃了,然后进了森林发现了一个糖果屋,里面有个女巫,专门吃小孩子 然而如果我们仔细 ...
- 【2020.11.17提高组模拟】数数(cuvelia) 题解
[2020.11.17提高组模拟]数数(cuvelia) 题解 题目描述 给你一个长度为n的序列\(a_1...a_n\).对于所有的\(k\in [1,n]\)选择序列中的\(k\)个数(下标为\( ...
- Chocolate
提供一种比较清新的做法. 思路:贪心. 思考:如果在巧克力上横向切一刀,那么纵向要切的刀数就会加一.如果在巧克力上纵向切一刀,那么横向要切的刀数就会加一. 结论:要先切代价大的,再切代价小的. 做法: ...
- Springboot笔记<7>过滤器与拦截器
过滤器 拦截器 过滤器 过滤器拦截的是URL Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器 ...