file,-6ren">
gpt4 book ai didi

rust - Rust 匹配表达式类型是不确定的吗?

转载 作者:行者123 更新时间:2023-11-29 08:03:47 26 4
gpt4 key购买 nike

阅读 Rust 教程时,我发现了以下代码片段:

let f = File::open("hello.txt");

let mut f = match f {
Ok(file) => file,
Err(e) => return Err(e)
};

这似乎是f可以具有类型 Result<_, _> 的值(如果 f == Err(e) )或 _ 类型的值(即,无论 file 恰好是什么类型)。

这是否意味着 Rust 中的匹配表达式是类型不确定的?

最佳答案

不,类型不是不确定的。您首先创建 Result<io::File, io::Error> 类型的绑定(bind)。然后,您将为 f 创建一个新的(可变)绑定(bind)。类型 io::File (因为这就是您的情况下 Ok 枚举的 Result 变体中包含的内容)这个新绑定(bind)会遮盖旧绑定(bind),就像 Perl(和 C/C++ 等)中的一个 block 会引入一个新范围:

my $x = [42, 24];
{
# new scope
my $x = $x->[0];
say Dumper $x; # 42, an INT
}
say Dumper $x; # [42, 24], an ARRAY

在 Rust 中,let可以被认为是引入一个类似的新作用域,遮盖以前的绑定(bind)。

既然你也return当您遇到Err(_)超出您的功能 ,编译器仍然能够推断第二个绑定(bind)的类型 f成为io::File .

关于rust - Rust 匹配表达式类型是不确定的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697088/

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