我理解它是如何&工作的,但是它和它有ref什么区别?它们可以互换吗?
我发现的唯一信息(因为在Google上搜索符号效果不佳)是Rust By Example上的这个页面,但它没有解释这两者之间的区别.本书的信息量不大,ref仅列在" 模式"一章中.但它似乎ref也在该背景之外使用.
那么,有什么用途ref,有什么区别&?
Fra*_*gné 12
ref在模式中用于绑定对左值的引用(左值是一个值,您可以使用或多或少的地址).
重要的是要理解模式从正常表达式"向后",因为它们用于解构价值.
这是一个简单的例子.假设我们有这个:
let value = 42;
Run Code Online (Sandbox Code Playgroud)
我们可以通过value两种方式绑定引用:
let reference1 = &value;
let ref reference2 = value;
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我们使用&运算符来获取地址value.在第二种情况下,我们使用ref模式来"解构"左值.在这两种情况下,变量的类型都是&i32.
&也可以在模式中使用,但它恰恰相反:它通过解除引用来解构引用.假设我们有:
let value = 42;
let reference = &value;
Run Code Online (Sandbox Code Playgroud)
我们可以reference通过两种方式取消引用:
let deref1 = *reference;
let &deref2 = reference;
Run Code Online (Sandbox Code Playgroud)
在这里,两者的类型deref1和deref2为i32.
但是,并不总是可以通过两种方式编写相同的表达式,如此处所示.例如,您不能用来&引用存储在枚举变体中的值:您需要匹配它.例如,如果要引用a中的值Some,则需要编写:
match option {
Some(ref value) => { /* stuff */ }
None => { /* stuff */ }
}
Run Code Online (Sandbox Code Playgroud)
因为在Rust中无法使用&运算符来访问该值.
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |