我目前正在通过 rustbook 学习 Rust,到目前为止我没有遇到任何问题,但 if-let 对我来说没有任何意义。我想我有点明白它的作用,但语法对我来说似乎不合逻辑,这阻碍了我使用它。
这个问题解释了 if-let 之间的差异,但我读了答案,但仍然无法理解。我不明白为什么选择这种语法。
我链接的问题中接受的答案有一些例子:
if let Foo::Bar = a {
println!("a is foobar");
}
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是使用 let 是因为我们声明了一个临时变量并分配a给它,如果可能的话,执行 if 块。这对我来说是有意义的。但后来我读了接下来的两个例子:
if let Foo::Qux(value) = c {
println!("c is {}", value);
}
if let Foo::Qux(value @ 100) = c {
println!("c is one hundred");
}
Run Code Online (Sandbox Code Playgroud)
这些条款对我来说let Foo::Qux(value)似乎let Foo::Qux(value @ 100)是错误的。据我了解,我不能声明这样的变量。
这里发生了什么?
我了解模式匹配,但 let 关键字让我觉得有些东西我不明白。
我是对的,let mypattern = myvariable基本上是这样fn rusts_patternmatching(mypattern, myvariable) ->bool,语法对我来说只是令人困惑吗?那么为什么选择let关键字呢?
评论:据我了解,它基本上与针对一只手臂的模式匹配相同。但是 let 关键字对我来说表达起来似乎是错误的,我觉得我对我头脑中的概念从根本上来说是错误的。对我来说,“let”用于在 …
在 Rust 中,您可以在解包时使用if let而不是match直接使用一个简单的值。
所以代替
match opt_val {
Some(x) => {
do_something_with(x);
}
_ => {}
}
Run Code Online (Sandbox Code Playgroud)
if let Some(x) = opt_val {
do_something_with(x);
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在心理上阅读或处理这段代码?对于match,这很简单:“如果opt_val是匹配的Some(x),然后做......用x”。
因为if let我总是觉得这是错误的方式:“如果Some(x)匹配(?)opt_val,那么做......”。请注意,let这句话中没有。
这没什么大不了的,但我继续绊倒这个。
我真的很喜欢“如果这让绑定成功,那么...... ”来自接受的答案,因为我认为它设置了正确的焦点。过多地关注模式匹配首先让我陷入了这个“问题”。作为参考,(IR)可反驳和let讨论这里的锈的书。