【发布时间】:2017-01-10 16:37:08
【问题描述】:
当已知选项变量不是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 notcovered”。
要明确这个问题与借用的上下文无关。
let Some(var) = option; 语法是否可以在已知不是None 的情况下使用?解决“模式None 未覆盖”警告?或者这在 if 语句之外根本不支持?
【问题讨论】:
-
“在一个案例中我遇到了”那个案例是什么?
-
或stackoverflow.com/q/30463490/155423的副本; stackoverflow.com/q/30365055/155423;或任何105 other questions about "cannot move out of borrowed content"。太糟糕了,这里没有足够的细节来选择更好的副本。
-
这个问题不是关于借用的上下文,而是关于使用
let Some(var) = option_var- 如果它可能在 if 语句之外。 -
stackoverflow.com/questions/34953711/… 可能重复?答案是:不,你不能使用语法......幸运的是,在
Option的情况下,unwrap()触手可及。为什么不使用它? -
@LukasKalbertodt stackoverflow.com/questions/34953711 是一个相当模糊的问题,这个问题的答案不是这个问题的直接答案,所以不要认为它是重复的。这个问题很直接 - "can a 'let Some(var) = option_var;'在 if 语句之外使用表达式 - 是或否”,如果答案是否定的,那么这就是我想知道的全部。我问这个是因为警告没有明确说明它不受支持,这让我想如果我知道正确的编写方法 - 它可以工作。
标签: rust variable-assignment optional