将变量传递到生锈的范围
Pass variable into a scope in rust
我在尝试在 Rust 中实现过滤器方法的回调时遇到问题。我有这个功能:
fn filter_by_mod(num: i32) -> fn(x: &i32) -> bool {
let func = |x: &i32| {
x.to_owned() % num == 0
};
return func;
}
我正在尝试按 mod 进行过滤,我想通过参数传递数字并在 func clousure 中使用,但是当我尝试编译时出现以下错误:
fn filter_by_mod(num: i32) -> fn(x: &i32) -> bool {
| ------------------- expected `for<'r> fn(&'r i32) -> bool` because of return type
9 | let func = |x: &i32| {
| ________________-
10 | | x.to_owned() % num == 0
11 | | };
| |_____- the found closure
12 | return func;
| ^^^^ expected fn pointer, found closure
|
= note: expected fn pointer `for<'r> fn(&'r i32) -> bool`
found closure `[closure@.\main.rs:9:16: 11:6]`
note: closures can only be coerced to `fn` types if they do not capture any variables
--> .\main.rs:10:24
|
10 | x.to_owned() % num == 0
| ^^^ `num` captured here
error: aborting due to previous error
如何将数字传递给 func 作用域?我希望你能理解我,因为我的英语不好。谢谢
这里发生了两件事:
- 您需要将 num 移动到新函数
- 你的函数签名错误,你不能return一个函数指针,你需要使用
impl
+ 需要函数特征签名。
还有细微的时尚调整:
fn filter_by_mod(num: i32) -> impl Fn(&i32) -> bool {
move |x: &i32| {
x.to_owned() % num == 0
}
}
示例编译不通过有两个问题:
- 您正在 returning fn 类型。在 Rust 中它是一个函数指针,但闭包不是函数,所以你需要 return Fn 特征的实现。
- 但是默认闭包借用了context参数,所以需要移动它:
fn filter_by_mod(num: i32) -> impl Fn(&i32) -> bool {
let func = move |x: &i32| {
x.to_owned() % num == 0
};
return func;
}
我在尝试在 Rust 中实现过滤器方法的回调时遇到问题。我有这个功能:
fn filter_by_mod(num: i32) -> fn(x: &i32) -> bool {
let func = |x: &i32| {
x.to_owned() % num == 0
};
return func;
}
我正在尝试按 mod 进行过滤,我想通过参数传递数字并在 func clousure 中使用,但是当我尝试编译时出现以下错误:
fn filter_by_mod(num: i32) -> fn(x: &i32) -> bool {
| ------------------- expected `for<'r> fn(&'r i32) -> bool` because of return type
9 | let func = |x: &i32| {
| ________________-
10 | | x.to_owned() % num == 0
11 | | };
| |_____- the found closure
12 | return func;
| ^^^^ expected fn pointer, found closure
|
= note: expected fn pointer `for<'r> fn(&'r i32) -> bool`
found closure `[closure@.\main.rs:9:16: 11:6]`
note: closures can only be coerced to `fn` types if they do not capture any variables
--> .\main.rs:10:24
|
10 | x.to_owned() % num == 0
| ^^^ `num` captured here
error: aborting due to previous error
如何将数字传递给 func 作用域?我希望你能理解我,因为我的英语不好。谢谢
这里发生了两件事:
- 您需要将 num 移动到新函数
- 你的函数签名错误,你不能return一个函数指针,你需要使用
impl
+ 需要函数特征签名。
还有细微的时尚调整:
fn filter_by_mod(num: i32) -> impl Fn(&i32) -> bool {
move |x: &i32| {
x.to_owned() % num == 0
}
}
示例编译不通过有两个问题:
- 您正在 returning fn 类型。在 Rust 中它是一个函数指针,但闭包不是函数,所以你需要 return Fn 特征的实现。
- 但是默认闭包借用了context参数,所以需要移动它:
fn filter_by_mod(num: i32) -> impl Fn(&i32) -> bool {
let func = move |x: &i32| {
x.to_owned() % num == 0
};
return func;
}