ref
在模式中用于将引用绑定到lvalue(左值是一个可以或多或少获取其地址的值)。
重要的是要理解模式从正常表达中“倒退”,因为它们习惯于解构 values.
这是一个简单的例子。假设我们有这个:
let value = 42;
我们可以绑定一个引用value
有两种方式:
let reference1 = &value;
let ref reference2 = value;
在第一种情况下,我们使用&
作为操作员获取地址value
。在第二种情况下,我们使用ref
“解构”左值的模式。在这两种情况下,变量的类型都是&i32
.
&
也可以在模式中使用,但它的作用相反:它通过取消引用来解构引用。假设我们有:
let value = 42;
let reference = &value;
我们可以取消引用reference
有两种方式:
let deref1 = *reference;
let &deref2 = reference;
这里,两者的类型deref1
and deref2
is i32
.
然而,并不总是可以用此处所示的两种方式编写相同的表达式。例如,您不能使用&
要引用存储在枚举变量中的值:您需要对其进行匹配。例如,如果您想引用 a 中的值Some
,你需要写:
match option {
Some(ref value) => { /* stuff */ }
None => { /* stuff */ }
}
因为 Rust 中没有办法你可以使用&
运算符访问该值,否则。