Rust基础笔记之浅谈References and Borrowing

Borrowing


先来看一段代码:

fn foo(v1: Vec<i32>, v2: Vec<i32>) -> (Vec<i32>, Vec<i32>, i32) {
    // do stuff with v1 and v2
    // hand back ownership, and the result of our function
    (v1, v2, 42)
}
let v1=vec![1, 2, 3];
let v2=vec![1, 2, 3];
let (v1, v2, answer) =foo(v1, v2);

如果得这么写代码,那还不得死啊。
当然了,这并不符合Rust的习惯,也许你仅仅了解完Ownership的概念的时候,也只能写出这样的代码,似乎没有其他什么好的办法了,现在就让我们来看一看References 和 Borrowing的概念。

什么是References(引用):就像C语言的指针,在Rust中类似于&v这样的语法来引用v,这样的话意味着是去引用v的资源而不是拥有它(就是借来用用和永久占有它的区别),我不知道我这样说有没有问题,但大概意思应该是这样的。

这里就该引出borrow的概念了,let v2 = &v;的意思是v2引用了v的的资源,v2借用(borrow)了v对资源的所有权,既然是借,用完了就得还,这和日常生活中你借别人的东西的过程是一样的,当v2超出了它的作用域的时候,系统并不会释放该资源,因为是借的嘛(这里和move的概念就有区别了,move就差不多是这东西我送给你了),用完之后就得将所有权归还给v,接着我们又可以重新使用v了。

在上面的例子中的v是immutable(不可修改的),那么借用了v的所有权的v2也是immutable(不可修改的),强行修改v2的值的话,就会发生一下错误:

error: cannot borrow immutable borrowed content `*v` as mutable

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值