Update chapter_3_7_2.md

This commit is contained in:
令狐一冲
2023-05-17 15:16:51 +08:00
committed by GitHub
parent ab623fffd8
commit f79e396d16

View File

@@ -42,7 +42,7 @@ fn print(s: String) -> String {
![注释](../../assets/10.png)
获取变量的引用,称之为借用。通过借用,允许使用被引用变量绑定的值,同时又没有移动该变量的所有权。前面的示例代码可以变成如下:
**获取变量的引用,称之为借用** 。通过借用,允许使用被引用变量绑定的值,同时又没有移动该变量的所有权。前面的示例代码可以变成如下:
```Rust
fn main() {
let s2 = String::from("hello");
@@ -114,7 +114,7 @@ fn change(some_string: &mut String) {
} // 花括号之前为a的作用域结束位置
```
引用的作用域和变量的作用域有些区别在老版本编译器Rust 1.31 之前)中,引用的作用域和变量的作用域一样,也是从定义的位置开始到花括号之前结束,如下:
引用的作用域和变量的作用域有些区别,**在老版本编译器Rust 1.31 之前)中,引用的作用域和变量的作用域一样,也是从定义的位置开始到花括号之前结束**,如下:
```Rust
{
...
@@ -123,7 +123,7 @@ fn change(some_string: &mut String) {
....
}// 花括号之前为r的作用域结束位置
```
在新版本编译器中,引用作用域的结束位置从花括号变成最后一次使用的位置,如下:
**在新版本编译器中,引用作用域的结束位置从花括号变成最后一次使用的位置**,如下:
```Rust
{
...
@@ -135,7 +135,7 @@ fn change(some_string: &mut String) {
```
- 使用可变引用的限制
1限制一同一作用域特定数据只能有一个可变引用。如下代码会报错
1限制一**同一作用域,特定数据只能有一个可变引用**。如下代码会报错:
```Rust
fn main() {
let mut s1 = String::from("hello");
@@ -177,7 +177,7 @@ fn main() {
}
```
2限制二同一作用域可变引用和不可变引用不能同时存在。如下代码编译错误
2限制二**同一作用域,可变引用和不可变引用不能同时存在**。如下代码编译错误:
```Rust
fn main() {
let mut s = String::from("hello");
@@ -203,9 +203,9 @@ fn main() {
} // 老编译器中: r1、r2、r3的作用域都是在花括号之前结束
```
Rust这样设计的原因
**Rust这样设计的原因**
通过此设计,防止同一时间对同一数据存在多个可变引用。 这样Rust 在编译时就避免了数据竞争。数据竞争data race类似于竞态条件它可由这三个行为造成
通过此设计,防止同一时间对同一数据存在多个可变引用。 这样Rust 在编译时就避免了数据竞争。**数据竞争data race** 类似于竞态条件,它可由这三个行为造成:
- 两个或更多指针同时访问同一数据。
- 至少有一个指针被用来写入数据。