tbm*_*ale 6 reference mutable rust
有什么区别
let y = &mut 5;
*y += 1;
let x = *y + 1;
Run Code Online (Sandbox Code Playgroud)
和
let mut y = 5;
y += 1;
let x = y + 1;
Run Code Online (Sandbox Code Playgroud)
他们返回相同的结果println!,但我不能决定哪一个更好.
Sim*_*ead 11
给出将变量绑定到一个或另一个的简单示例,然后println!在本地调用,结果确实没有太大区别(如您所述).
跨越函数边界时,可变值与可变引用变得更加清晰.看看这段代码:
fn main() {
let mut x = &mut 5;
do_work(x);
println!("{}", x);
}
fn do_work(n: &mut u32) {
*n += 5;
}
Run Code Online (Sandbox Code Playgroud)
你认为它打印什么?这是在操场上
现在看看这段代码:
fn main() {
let mut x = 5;
do_work(x);
println!("{}", x);
}
fn do_work(mut n: u32) {
n += 5;
}
Run Code Online (Sandbox Code Playgroud)
你认为这印刷什么?这是在操场上
答案是:
顶部代码块打印10.底部代码块打印5.
使用可变引用意味着您将引用存储变量的内存中的位置x.跨越函数边界,您可以更改存储在那里的值.当方法返回并println!命中时,x更新值.
在这个具体的例子中,x是a u32,它实现了Copy特征.当你传递x到do_work方法,副本x而成.在do_work方法的主体中,向副本n += 5添加5 ..并且根本不引用原始内存块.
...无法决定哪一个更好.
这完全取决于用例.跨越函数边界时是否需要引用原始内存?如果您已将变量标记为可变,则很可能您希望引用原始内存以期更新它.在这种情况下,您将使用可变引用.如果您只是在函数内局部变换变量..那么您将不需要引用.
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |