如果已知选项变量为非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
声明之外不支持?
鉴于以下情况:
fn main() { let foo = Some(1); let Some(bar) = foo; }
错误[E0005]:本地绑定中的可反射模式:
None
未涵盖
let Some(x) = y
介绍一种模式; let
和match
语句和函数的参数是模式匹配上下文,但由于在这种情况下,模式不包括其他可能的情况下,它是不是一个有效的模式匹配上下文.
该let Some(x) = y
语句适用的唯一上下文是if let
表达式和while let
循环.
如果您确定(例如,使用较早assert!()
或如果是"手动"引入)a None
是不可能的,您可以使用unwrap()
.