update lifetime/basic.md
This commit is contained in:
parent
1fa2243ede
commit
9b9a981254
|
@ -274,4 +274,85 @@ fn main()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## elision
|
## Method
|
||||||
|
Methods are annotated similarly to functions.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
```rust,editable
|
||||||
|
struct Owner(i32);
|
||||||
|
|
||||||
|
impl Owner {
|
||||||
|
// Annotate lifetimes as in a standalone function.
|
||||||
|
fn add_one<'a>(&'a mut self) { self.0 += 1; }
|
||||||
|
fn print<'a>(&'a self) {
|
||||||
|
println!("`print`: {}", self.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut owner = Owner(18);
|
||||||
|
|
||||||
|
owner.add_one();
|
||||||
|
owner.print();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
9、🌟🌟
|
||||||
|
```rust,editable
|
||||||
|
/* Make it work by adding proper lifetime annotations */
|
||||||
|
struct ImportantExcerpt {
|
||||||
|
part: &str,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ImportantExcerpt {
|
||||||
|
fn level(&'a self) -> i32 {
|
||||||
|
3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Elision
|
||||||
|
Some lifetime patterns are so comman that the borrow checker will allow you to omit them to save typing and to improve readablity.
|
||||||
|
|
||||||
|
This is known as **Elision**. Elision exist in Rust only because these patterns are common.
|
||||||
|
|
||||||
|
For a more comprehensive understanding of elision, please see [lifetime elision](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision) in the official book.
|
||||||
|
|
||||||
|
10、🌟🌟
|
||||||
|
```rust,editable
|
||||||
|
/* Remove all the lifetimes that can be elided */
|
||||||
|
|
||||||
|
fn nput<'a>(x: &'a i32) {
|
||||||
|
println!("`annotated_input`: {}", x);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pass<'a>(x: &'a i32) -> &'a i32 { x }
|
||||||
|
|
||||||
|
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Owner(i32);
|
||||||
|
|
||||||
|
impl Owner {
|
||||||
|
// Annotate lifetimes as in a standalone function.
|
||||||
|
fn add_one<'a>(&'a mut self) { self.0 += 1; }
|
||||||
|
fn print<'a>(&'a self) {
|
||||||
|
println!("`print`: {}", self.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Person<'a> {
|
||||||
|
age: u8,
|
||||||
|
name: &'a str,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Either<'a> {
|
||||||
|
Num(i32),
|
||||||
|
Ref(&'a i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
|
```
|
|
@ -192,6 +192,54 @@ fn main()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
9.
|
||||||
|
```rust
|
||||||
|
struct ImportantExcerpt<'a> {
|
||||||
|
part: &'a str,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ImportantExcerpt<'a> {
|
||||||
|
fn level(&'a self) -> i32 {
|
||||||
|
3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
10.
|
||||||
|
```rust
|
||||||
|
|
||||||
|
fn nput(x: &i32) {
|
||||||
|
println!("`annotated_input`: {}", x);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pass(x: &i32) -> &i32 { x }
|
||||||
|
|
||||||
|
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Owner(i32);
|
||||||
|
|
||||||
|
impl Owner {
|
||||||
|
// Annotate lifetimes as in a standalone function.
|
||||||
|
fn add_one(&mut self) { self.0 += 1; }
|
||||||
|
fn print(&self) {
|
||||||
|
println!("`print`: {}", self.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Person<'a> {
|
||||||
|
age: u8,
|
||||||
|
name: &'a str,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Either<'a> {
|
||||||
|
Num(i32),
|
||||||
|
Ref(&'a i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
|
```
|
Loading…
Reference in New Issue