gpt4 book ai didi

rust - 在已知不是 `let Some(var) = option;` 的情况下可以使用 `None` 语法吗?

转载 作者:行者123 更新时间:2023-11-29 08:10:16 25 4
gpt4 key购买 nike

当一个选项变量已知为非None时,通常可以这样写:

let var = option_var.unwrap();

在我遇到的一个案例中,这导致了关于移出借用上下文的错误。

if let Some(var) = option_var { ... }

(方便,因为它也允许 Some(ref mut var) = option_var)。

这行得通,但是在这种情况下,我不希望这是一个 if 语句。编写 let Some(var) = option_var; 失败并出现错误“pattern None not covered”。

要明确这个问题不是关于借用的上下文

let Some(var) = option; 语法可以用在已知不是 None 的情况下吗?解决“Pattern None not covered”警告?或者这在 if 语句之外根本不受支持?

最佳答案

给定以下情况:

fn main() {
let foo = Some(1);
let Some(bar) = foo;
}

error[E0005]: refutable pattern in local binding: None not covered

let Some(x) = y 引入了一种模式; letmatch 语句和函数参数是模式匹配上下文,但由于在这种情况下模式不涵盖其他可能的情况,因此它不是有效的模式匹配上下文。

let Some(x) = y 语句适用的唯一上下文是 if let表达式和 while let循环。

如果您确定(例如,使用较早的 assert!() 或如果它是“手动”引入的)None 是不可能的,您可以使用 unwrap()

关于rust - 在已知不是 `let Some(var) = option;` 的情况下可以使用 `None` 语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573764/

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