参考文档:ref - Rust
ref
用于在模式匹配中借用值而非夺走它的所有权,由于在 match
表达式中变量会被 consumed。对于没有实现 Copy trait
的类型,若不使用 ref
会导致后续无法使用之前的变量。
By default, identifier patterns bind a variable to a copy of or move from the matched value depending on whether the matched value implements
Copy
.
https://doc.rust-lang.org/reference/patterns.html#identifier-patterns
1 | let maybe_name = Some(String::from("Alice")); |
使用 ref
关键字就可仅借用变量 n 并维持其所有权。
1 | let maybe_name = Some(String::from("Alice")); |
注意这里虽然 ref
是标在了 n
前面,但其对应的是 maybe_name
。
ref
关键字出现的位置与 &
非常类似,但二者用途不同。上述代码中将对应位置替换为 &
会报错。