当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《`letSome(var)=option;`语法可以用在已知它不是'None`的情况下吗?》经验,为你挑选了1个好方法。

如果已知选项变量为非None,则通常可以写入:

let var = option_var.unwrap();

在我碰到的一个案例中,这引起了一个关于搬出借来的上下文的错误.

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

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

这是有效的,但在这种情况下,我不希望这是一个if声明.写入let Some(var) = option_var;失败,错误"模式None未覆盖".

要明确这个问题不是借用的背景.

可以在let Some(var) = option;语法的情况下使用,其中据了解,这是不是None?解决" None未覆盖模式"警告?或者这只是在if声明之外不支持?



1> ljedrz..:

鉴于以下情况:

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

错误[E0005]:本地绑定中的可反射模式:None未涵盖

let Some(x) = y介绍一种模式; letmatch语句和函数的参数是模式匹配上下文,但由于在这种情况下,模式不包括其他可能的情况下,它是不是一个有效的模式匹配上下文.

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

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

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有