|
|
@ -35,7 +35,7 @@ Rust 的核心功能(之一)是 **所有权**(*ownership*)。虽然该
|
|
|
|
首先,让我们看一下所有权的规则。当我们通过举例说明时,请谨记这些规则:
|
|
|
|
首先,让我们看一下所有权的规则。当我们通过举例说明时,请谨记这些规则:
|
|
|
|
|
|
|
|
|
|
|
|
> 1. Rust 中的每一个值都有一个被称为其 **所有者**(*owner*)的变量。
|
|
|
|
> 1. Rust 中的每一个值都有一个被称为其 **所有者**(*owner*)的变量。
|
|
|
|
> 2. 值有且只有一个所有者。
|
|
|
|
> 2. 值在任一时刻有且只有一个所有者。
|
|
|
|
> 3. 当所有者(变量)离开作用域,这个值将被丢弃。
|
|
|
|
> 3. 当所有者(变量)离开作用域,这个值将被丢弃。
|
|
|
|
|
|
|
|
|
|
|
|
### 变量作用域
|
|
|
|
### 变量作用域
|
|
|
@ -73,7 +73,7 @@ let s = "hello";
|
|
|
|
|
|
|
|
|
|
|
|
这里使用 `String` 作为例子,并专注于 `String` 与所有权相关的部分。这些方面也同样适用于标准库提供的或你自己创建的其他复杂数据类型。在第八章会更深入地讲解 `String`。
|
|
|
|
这里使用 `String` 作为例子,并专注于 `String` 与所有权相关的部分。这些方面也同样适用于标准库提供的或你自己创建的其他复杂数据类型。在第八章会更深入地讲解 `String`。
|
|
|
|
|
|
|
|
|
|
|
|
我们已经见过字符串字面值,字符串值被硬编码进程序里。字符串字面值是很方便的,不过他们并不适合使用文本的每一种场景。原因之一就是他们是不可变的。另一个原因是并不是所有字符串的值都能在编写代码时就知道:例如,要是想获取用户输入并存储该怎么办呢?为此,Rust 有第二个字符串类型,`String`。这个类型被分配到堆上,所以能够存储在编译时未知大小的文本。可以使用 `from` 函数基于字符串字面值来创建 `String`,如下:
|
|
|
|
我们已经见过字符串字面值,即被硬编码进程序里的字符串值。字符串字面值是很方便的,不过它们并不适合使用文本的每一种场景。原因之一就是它们是不可变的。另一个原因是并非所有字符串的值都能在编写代码时就知道:例如,要是想获取用户输入并存储该怎么办呢?为此,Rust 有第二个字符串类型,`String`。这个类型被分配到堆上,所以能够存储在编译时未知大小的文本。可以使用 `from` 函数基于字符串字面值来创建 `String`,如下:
|
|
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
let s = String::from("hello");
|
|
|
|
let s = String::from("hello");
|
|
|
|