如何"read" if let 表达式?
How to "read" if let expressions?
在 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
执行...”。 =26=]
对于if let
,我总觉得它是错误的方式:“如果Some(x)
匹配(?)opt_val
,那么......”。注意这句话没有let
这没什么大不了的,但我一直被这个绊倒。
我真的很喜欢接受的答案中的“if this let binding successful then...”,因为我认为它设置了正确的焦点。过分关注模式匹配让我首先陷入了这个“问题”。
作为参考,Rust 书中讨论了 (ir)refutability 和 let
here。
您不应期望任何编程语言语法中的关键字直接映射到英语或任何其他自然语言中的单词。
let
Rust 中的表达式总是接受一个模式,它可以让你做这样的事情:
let foo = (1, (2, 3));
let (a, (b, _)) = foo;
然而,这仅在模式 无可辩驳 时有效,即它将始终匹配。
if let
扩展它以适应可能并不总是匹配的类型。
您的阅读方式很好:“如果模式匹配则...”,或“如果此 let 绑定成功则...”。
在 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
执行...”。 =26=]
对于if let
,我总觉得它是错误的方式:“如果Some(x)
匹配(?)opt_val
,那么......”。注意这句话没有let
这没什么大不了的,但我一直被这个绊倒。
我真的很喜欢接受的答案中的“if this let binding successful then...”,因为我认为它设置了正确的焦点。过分关注模式匹配让我首先陷入了这个“问题”。
作为参考,Rust 书中讨论了 (ir)refutability 和 let
here。
您不应期望任何编程语言语法中的关键字直接映射到英语或任何其他自然语言中的单词。
let
Rust 中的表达式总是接受一个模式,它可以让你做这样的事情:
let foo = (1, (2, 3));
let (a, (b, _)) = foo;
然而,这仅在模式 无可辩驳 时有效,即它将始终匹配。
if let
扩展它以适应可能并不总是匹配的类型。
您的阅读方式很好:“如果模式匹配则...”,或“如果此 let 绑定成功则...”。