Anotaciones de lifetime en Rust
Si una función devuelve una referencia, el compilador debe saber de qué entrada presta.
fn longer<'a>(a: &'a str, b: &'a str) -> &'a str {
if a.len() >= b.len() {
a
} else {
b
}
}
fn first_line<'a>(text: &'a str, fallback: &'a str) -> &'a str {
text.lines().next().unwrap_or(fallback)
}
fn main() {
let title = String::from("Lifetimes");
println!("{}", longer(&title, "short"));
println!("{}", first_line("one\ntwo", "empty"));
}
Cómo funciona
<'a>declara un lifetime y luego lo nombra en las referencias.- El valor devuelto no puede sobrevivir a las entradas de donde salió.
- La anotación describe la relación; jamás la cambia.
Palabras clave y builtins usados aquí
Stringelsefnifletstr
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 343
- Tokens
- 145
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 83 segundos.
Paso 1 de 4 en Anotaciones de lifetime; paso 1 de 11 en Lifetimes y mutabilidad interior.