Rust 如果let,为什么要输入let关键字?

Rust 如果let,为什么要输入let关键字?,rust,pattern-matching,Rust,Pattern Matching,目前我正在通过铁锈书学习铁锈,到目前为止我还没有遇到任何问题,但如果让它对我来说毫无意义的话。我想我有点明白它的功能,但是语法对我来说似乎不符合逻辑,这阻碍了我使用它 这解释了if和if之间的区别,但是我读了答案,仍然不能理解。 我不明白为什么选择这种语法 我链接的问题的公认答案有一些例子: if let Foo::Bar = a { println!("a is foobar"); } if let Foo::Qux(value) = c { printl

目前我正在通过铁锈书学习铁锈,到目前为止我还没有遇到任何问题,但如果让它对我来说毫无意义的话。我想我有点明白它的功能,但是语法对我来说似乎不符合逻辑,这阻碍了我使用它

这解释了if和if之间的区别,但是我读了答案,仍然不能理解。 我不明白为什么选择这种语法

我链接的问题的公认答案有一些例子:

if let Foo::Bar = a {
    println!("a is foobar");
}
if let Foo::Qux(value) = c {
    println!("c is {}", value);
} 
if let Foo::Qux(value @ 100) = c {
    println!("c is one hundred");
}
我的第一个想法是使用let,因为我们声明了一个临时变量,并将
a
赋值给它,如果可能的话,执行if块。这对我来说是有道理的。 然后我读了下面两个例子:

if let Foo::Bar = a {
    println!("a is foobar");
}
if let Foo::Qux(value) = c {
    println!("c is {}", value);
} 
if let Foo::Qux(value @ 100) = c {
    println!("c is one hundred");
}
在我看来,
let Foo::Qux(value)
let Foo::Qux(value@100)
这两个术语似乎是错误的。据我所知,我不能声明这样的变量

这里发生了什么

我知道模式匹配,但let关键字让我觉得有些东西我不懂

我说的
let mypattern=myvariable
是基本的
fn生锈了模式匹配(mypattern,myvariable)->bool
对吗?语法让我感到困惑?为什么选择let关键字呢


对评论意见:
据我所知,这与单臂的模式匹配基本相同。但是对于我来说,let这个关键词似乎太错误了,以至于我觉得我头脑中的这个概念根本错了。对我来说,“let”用于声明rust中的变量。为什么在这里选择它是为了一些完全不同的东西?

如果让
处理一个单一的问题;名称分配是匹配模式的副作用。例如,
let(a,b)=(1,2)
(1,2)
匹配到模式
(a,b)

不同之处在于,
let
是必需的(“无可辩驳的”)匹配,而
if let
是可能的(“可反驳的”)匹配。不匹配模式的可能性由
if
表示

fn main(){
//不要在家里这样做
如果让(a,b)=(1,2){
println!(“{}{}”,a,b);
};
}

另请参阅,以了解将
if let
创建为条件(
if
)模式匹配(
let
)和背景的基本原理。

您以前读过模式匹配吗?比赛?是的,但我不明白我们为什么要在那里放球。选择语法的原因。let让我感到困惑,我想了解为什么它会使模式匹配语法出现在其中。请检查
if
if let
的语法以及它们可能的组合。附加的
let
关键字确定程序员试图破坏对象或只是进行逻辑检查。@ÖmerErden您能详细说明let关键字的用法吗?您能用“为什么”澄清您的问题吗?您是否想知道为什么这里使用了
let
关键字而不是其他单词?您是否想知道如果let
和裸
let
中的
let
是否相同?您是否意识到
let
if-let
基本上都可以工作?