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