听不懂谷歌《Pattern Matching - Destructuring structs条综合铁 rust 》中的第二个演讲者注解要点.

以下是示例代码.

struct Foo {
    x: (u32, u32),
    y: u32,
}

#[rustfmt::skip]
fn main() {
    let foo = Foo { x: (1, 2), y: 3 };
    match foo {
        Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),
        Foo { y: 2, x: i }   => println!("y = 2, x = {i:?}"),
        Foo { y, .. }        => println!("y = {y}, other fields were ignored"),
    }
}

还有那张有问题的纸条.

捕捉和持续表达之间的区别可能很难辨别.try 将第二个手臂中的2更改为变量,并发现它微妙地不起作用.将其更改为常量,然后再次查看它的工作情况.

我认为我的英语不好,但当它说,当做出改变时,它试图观察到它"微妙地不起作用"时,它想说什么?用y: a这样的东西替换y: 2中的2仍然可以编译吗?

推荐答案

它的意思是做:

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"),
    }
}

并期望它在y为2的情况下具有相同的匹配效果,但实际上它将匹配任意y并在a中捕获y(跟踪a = 2).

Rust相关问答推荐

使用Box优化可选的已知长度数组的内存分配

取得本地对象字段的所有权

为什么';t std::cell::ref使用引用而不是非空?

我是否可以在Ruust中修改 struct 实例上的字符串,以使其在修改后具有相同的字符串生存期?

允许 rust 迹 struct 条目具有多种类型

失真图像图形捕获Api

解析程序无法在Cargo 发布中 Select 依赖版本

如何轮询 Pin>?

如何从宏调用闭包?

借来的价值生命周期 不够长,不确定为什么它仍然是借来的

如何限制 GtkColumnView 行数

将泛型中的 Box 转换为 rust 中的 Box

如何使返回 XMLError 的方法与 anyhow::Error 兼容?

返回引用字符串的future

RAII 模式的 Rust 解决方案,用于在 new() 和 drop() 上修改另一个对象

为什么 no_std crate 可以依赖于使用 std 的 crate?

从函数返回 u32 的数组/切片

当 `T` 没有实现 `Debug` 时替代 `unwrap()`

制作嵌套迭代器的迭代器

覆盖类型的要求到底是什么?为什么单个元素元组满足它?