Keyword ref[][src]

Expand description

在模式匹配期间由引用绑定。

ref 注解模式绑定,使它们借用而不是移动。 就匹配而言,它不是模式的一部分: 不影响 是否 匹配值,仅 如何 匹配。

默认情况下,当您实际上不需要移动和拥有值时,match 语句将尽一切可能使用,这有时可能是个问题:

let maybe_name = Some(String::from("Alice"));
// 变量 'maybe_name' 在这里使用...
match maybe_name {
    Some(n) => println!("Hello, {}", n),
    _ => println!("Hello, world"),
}
// ... 现在不可用。
println!("Hello again, {}", maybe_name.unwrap_or("world".into()));
Run

使用 ref 关键字,该值仅被借用,而不移动,从而使它可在 match 语句之后使用:

let maybe_name = Some(String::from("Alice"));
// 使用 `ref`,该值是借用的,而不是移动的...
match maybe_name {
    Some(ref n) => println!("Hello, {}", n),
    _ => println!("Hello, world"),
}
// ... 所以可以在这里!
println!("Hello again, {}", maybe_name.unwrap_or("world".into()));
Run

& vs ref

  • & 表示您的模式需要 object 的引用。 因此,& 是所述模式的一部分: &FooFoo 匹配不同的对象。

  • ref 表示您希望对未包装的值进行引用。不匹配: Foo(ref foo)Foo(foo) 匹配相同的对象。

有关更多信息,请参见 Reference