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