如果让表达式,如何“阅读”?
在 Rust 中,您可以在解包时使用if let而不是match直接使用一个简单的值。
所以代替
match opt_val {
Some(x) => {
do_something_with(x);
}
_ => {}
}
你可以做
if let Some(x) = opt_val {
do_something_with(x);
}
我应该如何在心理上阅读或处理这段代码?对于match,这很简单:“如果opt_val是匹配的Some(x),然后做......用x”。
因为if let我总是觉得这是错误的方式:“如果Some(x)匹配(?)opt_val,那么做......”。请注意,let这句话中没有。
这没什么大不了的,但我继续绊倒这个。
我真的很喜欢“如果这让绑定成功,那么...... ”来自接受的答案,因为我认为它设置了正确的焦点。过多地关注模式匹配首先让我陷入了这个“问题”。作为参考,(IR)可反驳和let讨论这里的锈的书。
回答
您不应该期望任何编程语言的语法中的关键字直接映射到英语或任何其他自然语言中的单词。
let Rust 中的表达式总是接受一个模式,它可以让你做这样的事情:
let foo = (1, (2, 3));
let (a, (b, _)) = foo;
但是,这只适用于模式无可辩驳的情况,即它始终匹配。
if let 扩展它以适应可能不总是匹配的类型。
您如何阅读它就好了:“如果模式匹配则...”,或“如果此 let 绑定成功则...”。