enhance:增补Rust所有权文章。
This commit is contained in:
parent
5329767b0e
commit
32656236bb
|
@ -327,8 +327,8 @@ fn f(p: &'static i32) {
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
fn largest(arr: &[i32]) -> &i32 {
|
fn largest(arr: &[i32]) -> &i32 {
|
||||||
let mut s = &v[0];
|
let mut s = &arr[0];
|
||||||
for r in &v[1..] {
|
for r in &arr[1..] {
|
||||||
if *r > *s {
|
if *r > *s {
|
||||||
s = r;
|
s = r;
|
||||||
}
|
}
|
||||||
|
@ -337,11 +337,23 @@ fn largest(arr: &[i32]) -> &i32 {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
这个示例主语表达了在Rust中,如果一个函数接受一个引用作为参数并返回一个引用的时候,Rust会假设两个引用会具有相同的生命期。这个函数的完整写法是下面这样的。
|
这个示例主要表达了在Rust中,如果一个函数接受一个引用作为参数并返回一个引用的时候,Rust会假设两个引用会具有相同的生命期。这个函数的完整写法是下面这样的。
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
fn largest<'a>(arr: &'a [i32]) -> &'a i32 {
|
fn largest<'a>(arr: &'a [i32]) -> &'a i32 {
|
||||||
// ...
|
'b: {
|
||||||
|
let mut s = &'a arr[0];
|
||||||
|
for r in &arr[1..] {
|
||||||
|
'c: {
|
||||||
|
if *r > *s {
|
||||||
|
s = r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// s在这里的生命期属于'b,但其指向的地址的生命期属于'a
|
||||||
|
// 所以移交所有权是没有问题的,但是如果改成移交引用,就会出现问题
|
||||||
|
s
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user