rust - muestrales - introduccion ala probabilidad y estadistica mendenhall 13th pdf
¿Cuándo es útil definir múltiples vidas en una estructura? (1)
Después de quedarme despierto demasiado tarde, pude encontrar un caso de ejemplo en el que las vidas son importantes. Aquí está el código:
static ZERO: i32 = 0;
struct Foo<''a, ''b> {
x: &''a i32,
y: &''b i32,
}
fn get_x_or_zero_ref<''a, ''b>(x: &''a i32, y: &''b i32) -> &''a i32 {
if *x > *y {
return x
} else {
return &ZERO
}
}
fn main() {
let x = 1;
let v;
{
let y = 2;
let f = Foo { x: &x, y: &y };
v = get_x_or_zero_ref(&f.x, &f.y);
}
println!("{}", *v);
}
Si tuviera que cambiar la definición de
Foo
a esto:
struct Foo<''a> {
x: &''a i32,
y: &''a i32,
}
Entonces el código no se compilará.
Básicamente, si desea utilizar los campos de la estructura en cualquier función que requiera que sus parámetros tengan diferentes vidas, entonces los campos de la estructura también deben tener diferentes vidas.
En Rust, cuando queremos que una estructura contenga referencias, generalmente definimos sus vidas como tales:
struct Foo<''a> {
x: &''a i32,
y: &''a i32,
}
Pero también es posible definir múltiples vidas para diferentes referencias en la misma estructura:
struct Foo<''a, ''b> {
x: &''a i32,
y: &''b i32,
}
¿Cuándo es útil hacer esto?
¿Alguien puede proporcionar algún código de ejemplo que no se compila cuando ambas vidas son
''a
pero se compila cuando las vidas son
''a
y
''b
(o viceversa)?