我在有一天学习rust 的时候,感觉这一段代码比较经典,学习了一下,加了一个i32类型的闭包
原始代码段
fn main() {
let bar = match_some(|x|{
if let Some(x) = x {
return x > 2;
}
false
});
let bar1 = match_int(|x|{
x - 2
});
println!("barbool---{}", bar(Some(3)));
println!("bar1---{}", bar1(3));
}
pub fn match_some<I,F>(f:F) -> impl Fn(I) ->bool
where
F: Fn(I) ->bool
{
move|input: I| f(input)
}
pub fn match_int<I,F>(f:F) -> impl Fn(I)-> i32
where F: Fn(I)-> i32
{
move|input: I| f(input)
}
可以拆解,where后面 是 泛型类型或特征,move 移交所有权 ||{}是闭包写法。
fn main() {
let match1 = |x|{
if let Some(x) = x {
return x > 2;
}
false
};
let match2 = |x|{
x - 2
};
let bar = match_some(match1);
let bar1 = match_int(match2);
println!("barbool---{}", bar(Some(3)));
println!("bar1---{}", bar1(3));
}
pub fn match_some<I,F>(f:F) -> impl Fn(I) ->bool
where
F: Fn(I) ->bool
{
move|input: I| f(input)
}
pub fn match_int<I,F>(f:F) -> impl Fn(I)-> i32
where F: Fn(I)-> i32
{
move|input: I| f(input)
}