Merge pull request #7 from vincentsong/master

ch04-01 L203 L329
This commit is contained in:
KaiserY 2017-03-21 01:56:35 -05:00 committed by GitHub
commit 851727f427

View File

@ -200,7 +200,7 @@ error[E0382]: use of moved value: `s1`
which does not implement the `Copy` trait which does not implement the `Copy` trait
``` ```
如果你在其他语言中听说过术语“浅拷贝”“shallow copy”和“深拷贝”“deep copy”那么拷贝指针、长度和容量而不拷贝数据可能听起来像浅拷贝。不过因为 Rust 同时使第一个变量无效化了,这个操作被为**移动***move*),而不是浅拷贝。上面的例子可以解读为`s1`被**移动**到了`s2`中。那么具体发生了什么如图 4-6 所示。 如果你在其他语言中听说过术语“浅拷贝”“shallow copy”和“深拷贝”“deep copy”那么拷贝指针、长度和容量而不拷贝数据可能听起来像浅拷贝。不过因为 Rust 同时使第一个变量无效化了,这个操作被为**移动***move*),而不是浅拷贝。上面的例子可以解读为`s1`被**移动**到了`s2`中。那么具体发生了什么如图 4-6 所示。
<img alt="s1 moved to s2" src="img/trpl04-04.svg" class="center" style="width: 50%;" /> <img alt="s1 moved to s2" src="img/trpl04-04.svg" class="center" style="width: 50%;" />
@ -326,7 +326,7 @@ fn takes_and_gives_back(a_string: String) -> String { // a_string comes into
} }
``` ```
变量的所有权总是遵循相同的模式:将值赋值给另一个变量时移动它,并且当变量值的堆书卷离开作用域时,如果数据的所有权没有被移动到另外一个变量时,其值将通过`drop`被清理掉。 变量的所有权总是遵循相同的模式:将值赋值给另一个变量时移动它,并且当持有堆中数据值的变量离开作用域时,如果数据的所有权没有被移动到另外一个变量时,其值将通过`drop`被清理掉。
在每一个函数中都获取并接着返回所有权是冗余乏味的。如果我们想要函数使用一个值但不获取所有权改怎么办呢?如果我们还要接着使用它的话,每次都传递出去再传回来就有点烦人了,另外我们也可能想要返回函数体产生的任何(不止一个)数据。 在每一个函数中都获取并接着返回所有权是冗余乏味的。如果我们想要函数使用一个值但不获取所有权改怎么办呢?如果我们还要接着使用它的话,每次都传递出去再传回来就有点烦人了,另外我们也可能想要返回函数体产生的任何(不止一个)数据。