当前位置:网站首页>Rust language -- iterators and closures
Rust language -- iterators and closures
2022-07-06 02:44:00 【A pig】
Closure
Anonymous functions that can capture their environment , Closure is a function , The definition of this function can be assigned to a variable
Example — Program for generating custom exercise plan
The goal is : Don't let users wait unnecessarily
fn main(){
// Create closures
let expensive_closure = |num1, num2|{
num1+num2
};
let b = expensive_closure(11, 12);// Call closure
println!("{}", b);//23
}
Closures do not require annotation of the types of parameters and return values , It can be inferred by itself , Of course, you can also manually mark
fn main(){
let expensive_closure = |num1, num2|{
num1+num2
};
let b = expensive_closure(11, 12);// The first call has determined the parameters and return value types of the closure , And it can't be changed
let c = expensive_closure(11.0, 12.0);// Report errors , Because it has been inferred i32, i32
}
To avoid executing a time-consuming function many times, we can use closures and cooperate struct,struct Hold the closure and its call result
struct Cacher<T>
where T:Fn(u32)->u32
{
calculation:T,
value:Option<u32>,
}
impl<T> Cacher<T>
where T:Fn(u32)->u32{//Fn(u32)->u32 Is a closure type
fn new(calculation:T)->Cacher<T>{
Cacher{
calculation,
value:None,
}
}
fn value(&mut self, arg:u32)->u32{
match self.value{
Some(v)=>v,
None=>{
let v = (self.calculation)(arg);
self.value = Some(v);
v
},
}
}
}Closures can capture variables in the same environment as closures , Function can't
move Keyword can force a closure to take ownership of the environment value it uses
fn main(){
let a = 2;
let test1 = |number|{number};
let b = test1(a);// Successfully captured environment variables a
println!("{}", a);// here a The ownership of is not taken away by closures
}fn main(){
let x = vec![1, 2, 3];
let equal_to_x = move |z| z==x;
println!("{:#?}", x);//move Take ownership of environment variables
let y = vec![1, 2, 3];
assert!(equal_to_x(y))
}iterator
Traverse each element : .iter()
iterator trait Only one method is required :next
next: Go down one item at a time
One item of the iterator is returned each time
The returned results are wrapped in Some in
End of the iteration , return None
You can call directly on the iterator next Method
fn main(){
let vec = vec![1, 2, 3];
let mut v1_iter = vec.iter();
assert_eq!(v1_iter.next(), Some(&1));
assert_eq!(v1_iter.next(), Some(&2));
assert_eq!(v1_iter.next(), Some(&3));
assert_eq!(v1_iter.next(), None);
}sum() function
fn main(){
let vec = vec![1, 2, 3];
let v1_iter = vec.iter();
let total:i32 = v1_iter.sum();
println!("sum = {}", total);//6
}map() Method to change an iterator into another iterator
fn main(){
let vec = vec![1, 2, 3];
let v1_iter = vec.iter();
let iter_map:Vec<_> = v1_iter.map(|x|x+1).collect();
println!("{:#?}", iter_map);//2, 3, 4
}filter Method :
Receive a closure , This closure traverses each element of the iterator , return bool type
If the closure returns true: The current element will be contained in filter In the generated iterator , if false Will not be included in filter In the generated iterator
边栏推荐
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 20
- 有沒有sqlcdc監控多張錶 再關聯後 sink到另外一張錶的案例啊?全部在 mysql中操作
- Spherical lens and cylindrical lens
- Day 50 - install vsftpd on ceontos6.8
- The third level of C language punch in
- 数据准备工作
- 原型图设计
- 如何精准识别主数据?
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 18
- 2022 eye health exhibition, vision rehabilitation exhibition, optometry equipment exhibition, eye care products exhibition, eye mask Exhibition
猜你喜欢

Network Security Learning - Web vulnerabilities (Part 1)

A doctor's 22 years in Huawei

【Unity3D】GUI控件

【若依(ruoyi)】设置主题样式

Black high-end responsive website dream weaving template (adaptive mobile terminal)

QT release exe software and modify exe application icon

C language - Blue Bridge Cup - promised score

Zero basic self-study STM32 wildfire review of GPIO use absolute address to operate GPIO

深度解析链动2+1模式,颠覆传统卖货思维?
![[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11](/img/6a/398d9cceecdd9d7c9c4613d8b5ca27.jpg)
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11
随机推荐
MySQL winter vacation self-study 2022 11 (9)
Atcoder beginer contest 233 (a~d) solution
米家、涂鸦、Hilink、智汀等生态哪家强?5大主流智能品牌分析
2020.02.11
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 23
Advanced technology management - what is the physical, mental and mental strength of managers
微服务注册与发现
微软语音合成助手 v1.3 文本转语音工具,真实语音AI生成器
2022 eye health exhibition, vision rehabilitation exhibition, optometry equipment exhibition, eye care products exhibition, eye mask Exhibition
有没有sqlcdc监控多张表 再关联后 sink到另外一张表的案例啊?全部在 mysql中操作
有没有完全自主的国产化数据库技术
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 21
Sword finger offer 30 Stack containing min function
解决:AttributeError: ‘str‘ object has no attribute ‘decode‘
Redis delete policy
[Yu Yue education] basic reference materials of digital electronic technology of Xi'an University of Technology
【若依(ruoyi)】ztree 自定义图标(iconSkin 属性)
Shell script updates stored procedure to database
Shell脚本更新存储过程到数据库
Thinking on Architecture Design (under continuous updating)