首选的方法是获取结构域的引用?

Fal*_*ior 0 pattern-matching rust

从对结构的引用中获取对结构域的引用的所有方法让我不知所措。这些是我现在知道的方式:

struct Foo {
    bar: i32,
}

let foo = &Foo { bar: 123 };

let bar1 = &foo.bar;
let ref bar2 = foo.bar;
let ref bar3 = (*foo).bar;
let &Foo { bar: ref bar4 } = foo;
let Foo { bar: bar5 } = foo;
let Foo { bar: ref bar6 } = foo;
let Foo { bar: ref bar7 } = *foo;
Run Code Online (Sandbox Code Playgroud)

其中哪一种是“首选方式”?我假设像foo.bar单个字段和模式匹配这样的字段访问是首选,以便一次性获得多个字段,但是我不清楚我上面列出的多种方式中的每种情况下应该使用哪种方式。

Den*_*ret 5

没有理由避免直接访问

let bar1 = &foo.bar;
Run Code Online (Sandbox Code Playgroud)

这更容易编写和阅读。您在这里不需要模式匹配。

模式匹配是一个附加工具,它基本上解决了两种问题:

  • 例如,将值分解为几个值 let (a, b) = c;
  • 是在条件(“可辩驳的”) ,,while letif letmatch

请参阅所有可以使用的场所模式

正式禁止您的某些声明。Clippy会警告您有关裁判的内容