当前位置:网站首页>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
边栏推荐
- Technology sharing | what if Undo is too big
- PMP practice once a day | don't get lost in the exam -7.5
- Structural theme model (I) STM package workflow
- Bigder: I felt good about the 34/100 interview, but I didn't receive the admission
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 16
- 07 singleton mode
- JS events (add, delete) and delegates
- 淘宝焦点图布局实战
- 微服务间通信
- Follow the mouse's angle and keyboard events
猜你喜欢
Shell脚本更新存储过程到数据库
力扣今日題-729. 我的日程安排錶 I
Misc (eternal night), the preliminary competition of the innovation practice competition of the National College Students' information security competition
UE4 - how to make a simple TPS role (I) - create a basic role
Looking at the trend of sequence modeling of recommended systems in 2022 from the top paper
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 8
2345 file shredding, powerful file deletion tool, unbound pure extract version
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 20
Advanced technology management - what is the physical, mental and mental strength of managers
Solve 9 with C language × 9 Sudoku (personal test available) (thinking analysis)
随机推荐
ReferenceError: primordials is not defined错误解决
Zero foundation self-study STM32 - Review 2 - encapsulating GPIO registers with structures
MySQL winter vacation self-study 2022 11 (8)
2022 China eye Expo, Shandong vision prevention and control exhibition, myopia, China myopia correction Exhibition
在GBase 8c数据库中使用自带工具检查健康状态时,需要注意什么?
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11
Differences and usage scenarios between TCP and UDP
07 单件(Singleton)模式
"Hands on learning in depth" Chapter 2 - preparatory knowledge_ 2.3 linear algebra_ Learning thinking and exercise answers
How to accurately identify master data?
MySQL winter vacation self-study 2022 11 (5)
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 6
微服务注册与发现
有没有完全自主的国产化数据库技术
【Unity3D】GUI控件
JS events (add, delete) and delegates
RobotFramework入门(二)appUI自动化之app启动
Apt installation ZABBIX
Looking at the trend of sequence modeling of recommended systems in 2022 from the top paper
CSP date calculation