Add easy lifetime problems
This commit is contained in:
parent
7bc4cf757b
commit
5625678e57
|
@ -0,0 +1,66 @@
|
||||||
|
# Lifetime
|
||||||
|
|
||||||
|
|
||||||
|
**Lifetimes**
|
||||||
|
|
||||||
|
1. 🌟
|
||||||
|
```rust,editable
|
||||||
|
/* Make it work */
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct NoCopyType {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Example<'a, 'b> {
|
||||||
|
a: &'a u32,
|
||||||
|
b: &'b NoCopyType
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
/* 'a tied to fn-main stackframe */
|
||||||
|
let var_a = 35;
|
||||||
|
let example: Example;
|
||||||
|
|
||||||
|
// {
|
||||||
|
/* lifetime 'b tied to new stackframe/scope */
|
||||||
|
let var_b = NoCopyType {};
|
||||||
|
|
||||||
|
/* fixme */
|
||||||
|
example = Example { a: &var_a, b: &var_b };
|
||||||
|
// }
|
||||||
|
|
||||||
|
println!("(Success!) {:?}", example);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
2. 🌟
|
||||||
|
```rust,editable
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct NoCopyType {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
struct Example<'a, 'b> {
|
||||||
|
a: &'a u32,
|
||||||
|
b: &'b NoCopyType
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix function signature */
|
||||||
|
fn fix_me<'b>(foo: &Example<'b>) -> &'b NoCopyType
|
||||||
|
{ foo.b }
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
let no_copy = NoCopyType {};
|
||||||
|
let example = Example { a: &1, b: &no_copy };
|
||||||
|
fix_me(&example);
|
||||||
|
print!("Success!")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,4 +23,68 @@ fn args<'a, 'b, T: ToCStr>(&'a mut self, args: &'b [T]) -> &'a mut Command // ex
|
||||||
fn new(buf: &mut [u8]) -> BufWriter; // elided
|
fn new(buf: &mut [u8]) -> BufWriter; // elided
|
||||||
fn new(buf: &mut [u8]) -> BufWriter<'_>; // elided (with `rust_2018_idioms`)
|
fn new(buf: &mut [u8]) -> BufWriter<'_>; // elided (with `rust_2018_idioms`)
|
||||||
fn new<'a>(buf: &'a mut [u8]) -> BufWriter<'a> // expanded
|
fn new<'a>(buf: &'a mut [u8]) -> BufWriter<'a> // expanded
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Lifetimes**
|
||||||
|
|
||||||
|
1. 🌟
|
||||||
|
```rust,editable
|
||||||
|
/* Make it work */
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct NoCopyType {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Example<'a, 'b> {
|
||||||
|
a: &'a u32,
|
||||||
|
b: &'b NoCopyType
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
/* 'a tied to fn-main stackframe */
|
||||||
|
let var_a = 35;
|
||||||
|
let example: Example;
|
||||||
|
|
||||||
|
{
|
||||||
|
/* lifetime 'b tied to new stackframe/scope */
|
||||||
|
let var_b = NoCopyType {};
|
||||||
|
|
||||||
|
/* fixme */
|
||||||
|
example = Example { a: &var_a, b: &var_b };
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("(Success!) {:?}", example);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
2. 🌟
|
||||||
|
```rust,editable
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct NoCopyType {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
struct Example<'a, 'b> {
|
||||||
|
a: &'a u32,
|
||||||
|
b: &'b NoCopyType
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix function signature */
|
||||||
|
fn fix_me(foo: &Example) -> &NoCopyType
|
||||||
|
{ foo.b }
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
let no_copy = NoCopyType {};
|
||||||
|
let example = Example { a: &1, b: &no_copy };
|
||||||
|
fix_me(&example);
|
||||||
|
print!("Success!")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue