ken*_*esu 1 pattern-matching rust
无法理解Google 综合 Rust 的模式匹配 - 解构结构中的第二个演讲者注释点。
\n这是示例代码。
\nstruct Foo {\n x: (u32, u32),\n y: u32,\n}\n\n#[rustfmt::skip]\nfn main() {\n let foo = Foo { x: (1, 2), y: 3 };\n match foo {\n Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),\n Foo { y: 2, x: i } => println!("y = 2, x = {i:?}"),\n Foo { y, .. } => println!("y = {y}, other fields were ignored"),\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n以及有问题的注释。
\n\n\n捕获和常量表达式之间的区别可能很难识别。尝试将第二个臂中的 2 更改为变量,然后发现它巧妙地不起作用。将其更改为常量并查看它再次工作。
\n
认为我的英语很糟糕,但是当它说观察到它在进行更改时“巧妙地不起作用”时,它想表达什么?用类似的东西替换2in应该仍然可以编译吗?y: 2y: a
这意味着做:
fn main() {
let foo = Foo { x: (1, 2), y: 3 };
let a = 2;
match foo {
Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),
Foo { y: a, x: i } => println!("y = 2, x = {i:?}"),
Foo { y, .. } => println!("y = {y}, other fields were ignored"),
}
}
Run Code Online (Sandbox Code Playgroud)
并期望它具有与 if yis 2 匹配的相同效果,但实际上它将匹配 anyy并捕获yin a(shadowing a = 2)。