繁体   English   中英

`&`和`ref`有什么区别?

[英]What's the difference between `&` and `ref`?

我理解&工作方式,但是和ref之间有什么区别? 它们可以互换吗?

我发现的唯一信息(因为在Google上搜索符号效果不佳)是Rust By Example上的这个页面 ,但它没有解释这两者之间的区别。 本书的信息量不大,而ref仅列在“ 模式”一章中。 但似乎ref也在该上下文之外使用。

那么, ref的用途是什么,和&什么区别?

ref在模式中用于绑定对左值的引用(左值是一个值,您可以使用或多或少的地址)。

重要的是要理解模式从正常表达式“向后”,因为它们用于解构价值。

这是一个简单的例子。 假设我们有这个:

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;

这里, deref1deref2的类型都是i32

但是,并不总是可以通过两种方式编写相同的表达式,如此处所示。 例如,您不能使用&来引用存储在枚举变体中的值:您需要匹配它。 例如,如果要引用Some的值,则需要编写:

match option {
    Some(ref value) => { /* stuff */ }
    None => { /* stuff */ }
}

因为在Rust中没有办法,你可以使用&运算符来访问该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM