“&”和“ref”有什么区别?

2024-02-05

我明白如何&有效,但是它和有什么区别ref?它们可以互换吗?

我发现的唯一信息(因为在谷歌上搜索符号效果不太好)是Rust 示例页面 http://rustbyexample.com/flow_control/match/destructuring/destructure_pointers.html,但并没有解释两者之间的区别。The Book http://doc.rust-lang.org/book/references-and-borrowing.html信息不多,并且ref仅列于Patterns http://doc.rust-lang.org/book/patterns.html章节。但似乎ref也在该上下文之外使用。

那么,有什么用途ref,有什么区别&?


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 中没有办法你可以使用&运算符访问该值,否则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“&”和“ref”有什么区别? 的相关文章

随机推荐