[英]Why does Rust not infer the right type for a closure passed to filter?
[英]Why does Rust not infer this closure's return type?
Rust 编译器通常能够推断从闭包返回的表达式的类型:
fn main() {
let a_closure = |num|{
num+1.0
};
println!("{}", a_closure(1.0));
}
但是当我使用return
语句定义相同的闭包时,编译器无法推断类型:
fn main() {
let a_closure = |num|{
return num+1.0
};
println!("{}", a_closure(1.0));
}
/*
error[E0308]: mismatched types
--> src/main.rs:3:9
|
3 | return num+1.0
| ^^^^^^^^^^^^^^ expected `()`, found `f64`
*/
我很惊讶 Rust 不能在这里推断类型:是否可以在闭包中使用return
语句而不阻止编译器推断其返回类型?
这是因为缺少分号。 如果没有分号,则返回最后一个表达式,最后一个表达式是return num + 1.0
。 由于 return 语句使程序跳转到某个地方,否则它的值可以是任何值,例如:
fn main() {
let a: String = return;
}
但是,如果编译器没有看到直接分配给它的类型,它将选择 type ()
作为 return 语句的值。
所以发生的事情是:
()
。i32
。因此,由于有两次尝试从闭包返回,并且它们各自返回不同的类型,所以这是类型不匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.