gpt4 book ai didi

rust - 为什么 Rust 不推断这个闭包的返回类型?

转载 作者:行者123 更新时间:2023-12-03 11:25:18 25 4
gpt4 key购买 nike

Rust 编译器通常能够推断从闭包返回的表达式的类型:

fn main() {
let a_closure = |num|{
num+1.0
};
println!("{}", a_closure(1.0));
}
但是当我定义相同的闭包时,编译器无法推断类型 using a return statement :
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;
}
但是,如果编译器发现没有直接分配给它的类型,它将选择类型 ()作为 return 语句的值。
所以发生的事情是:
  • 编译器看到闭包中的最后一个表达式,并为其分配类型 ()默认情况下。
  • 然后编译器在闭包中看到一个显式返回,它返回类型 i32 .

  • 因此,由于有两次尝试从闭包中返回,并且每次都返回不同的类型,因此这是类型不匹配。

    关于rust - 为什么 Rust 不推断这个闭包的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65726999/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com