|
|
@ -1,6 +1,6 @@
|
|
|
|
# 引用与借用
|
|
|
|
# 引用与借用
|
|
|
|
|
|
|
|
|
|
|
|
上节中提到,如果仅仅支持通过转移所有权的方式获取一个值,那会让程序变得复杂。 Rust能否像其它编程语言一样,使用某个变量的指针或者引用呢?答案是可以。
|
|
|
|
上节中提到,如果仅仅只支持通过转移所有权的方式获取一个值,那会让程序变得复杂。 Rust能否像其它编程语言一样,使用某个变量的指针或者引用呢?答案是可以。
|
|
|
|
|
|
|
|
|
|
|
|
Rust通过`借用(Borrowing)`这个概念来达成上述的目的: **获取变量的引用,称之为借用(borrowing)**。正如现实生活中,如果一个人拥有某样东西,你可以从他那里借来,当使用完毕后,也必须要物归原主.
|
|
|
|
Rust通过`借用(Borrowing)`这个概念来达成上述的目的: **获取变量的引用,称之为借用(borrowing)**。正如现实生活中,如果一个人拥有某样东西,你可以从他那里借来,当使用完毕后,也必须要物归原主.
|
|
|
|
|
|
|
|
|
|
|
@ -100,7 +100,7 @@ error[E0596]: cannot borrow `*some_string` as mutable, as it is behind a `&` ref
|
|
|
|
|
|
|
|
|
|
|
|
### 可变引用
|
|
|
|
### 可变引用
|
|
|
|
|
|
|
|
|
|
|
|
只需要一个小调整,既可以修复上面代码的错误:
|
|
|
|
只需要一个小调整,即可修复上面代码的错误:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
fn main() {
|
|
|
|
fn main() {
|
|
|
|
let mut s = String::from("hello");
|
|
|
|
let mut s = String::from("hello");
|
|
|
@ -296,5 +296,5 @@ fn no_dangle() -> String {
|
|
|
|
## 借用规则总结
|
|
|
|
## 借用规则总结
|
|
|
|
|
|
|
|
|
|
|
|
总的来说,借用规则如下:
|
|
|
|
总的来说,借用规则如下:
|
|
|
|
- 同一时刻,你只能拥有要么一个可变引用, 要么任意多个不可变引用
|
|
|
|
- 同一时刻,你只能拥有一个可变引用或者任意多个不可变引用
|
|
|
|
- 引用必须总是有效的
|
|
|
|
- 引用必须总是有效的
|
|
|
|