typestar

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

  1. <'a> declara un lifetime y luego lo nombra en las referencias.
  2. El valor devuelto no puede sobrevivir a las entradas de donde salió.
  3. La anotación describe la relación; jamás la cambia.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 4 en Anotaciones de lifetime; paso 1 de 11 en Lifetimes y mutabilidad interior.

Siguiente →