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&
与 ref
-
&
表示您的模式期望引用一个对象。 因此,&
是所述模式的一部分:&Foo
与Foo
匹配不同的对象。 -
ref
表示您想要引用一个未包装的值。它不匹配:Foo(ref foo)
与Foo(foo)
匹配相同的对象。
有关更多信息,请参见 Reference。