相关疑难解决方法(0)

为什么 if-let 中有 let 关键字?

我目前正在通过 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”用于在 …

pattern-matching rust

5
推荐指数
1
解决办法
949
查看次数

如果让表达式,如何“阅读”?

在 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讨论这里的锈的书。

syntax pattern-matching rust

4
推荐指数
1
解决办法
125
查看次数

标签 统计

pattern-matching ×2

rust ×2

syntax ×1