使用 "mapping" 闭包实现一个函数
Implement a function with a "mapping" closure
我有一个向量 my_vec: Vec<MyStruct>
,我想编写一个可以像这样调用的函数:
let strings = my_func(&my_vec, |o| o.some_string);
let numbers = my_func(&my_vec, |o| o.foo + 5);
所以基本上我需要将一个引用传递给向量和一个闭包 f
我需要函数来调用向量上的 .map(f)
加上一些其他东西和 return与闭包中 returned 具有相同类型的值的新向量。
你想做这样的事情吗?
struct MyStruct {
o: i32
}
fn my_func<T, F>(_v: &Vec<MyStruct>, f: F) -> T
where F: FnOnce() -> T
{
f()
}
fn main() {
let i = vec!(MyStruct{o:3}, MyStruct{o:4} );
let strings = my_func(&i, || "a string");
let numbers = my_func(&i, || 5);
println!("{} {}", strings, numbers);
}
根据您的意见,您可以这样做
struct MyStruct {
o: i32,
}
fn my_func<T, F>(v: &[MyStruct], f: F) -> Vec<T>
where
F: FnMut(&MyStruct) -> T,
{
v.iter().map(f).collect()
}
fn main() {
let i = vec![MyStruct { o: 3 }, MyStruct { o: 4 }];
let strings = my_func(&i, |o| o.o + 5);
let numbers = my_func(&i, |o| format!("{} string", o.o));
println!("{:?} {:?}", strings, numbers);
}
我有一个向量 my_vec: Vec<MyStruct>
,我想编写一个可以像这样调用的函数:
let strings = my_func(&my_vec, |o| o.some_string);
let numbers = my_func(&my_vec, |o| o.foo + 5);
所以基本上我需要将一个引用传递给向量和一个闭包 f
我需要函数来调用向量上的 .map(f)
加上一些其他东西和 return与闭包中 returned 具有相同类型的值的新向量。
你想做这样的事情吗?
struct MyStruct {
o: i32
}
fn my_func<T, F>(_v: &Vec<MyStruct>, f: F) -> T
where F: FnOnce() -> T
{
f()
}
fn main() {
let i = vec!(MyStruct{o:3}, MyStruct{o:4} );
let strings = my_func(&i, || "a string");
let numbers = my_func(&i, || 5);
println!("{} {}", strings, numbers);
}
根据您的意见,您可以这样做
struct MyStruct {
o: i32,
}
fn my_func<T, F>(v: &[MyStruct], f: F) -> Vec<T>
where
F: FnMut(&MyStruct) -> T,
{
v.iter().map(f).collect()
}
fn main() {
let i = vec![MyStruct { o: 3 }, MyStruct { o: 4 }];
let strings = my_func(&i, |o| o.o + 5);
let numbers = my_func(&i, |o| format!("{} string", o.o));
println!("{:?} {:?}", strings, numbers);
}