typestar

Structs que prestan en Rust

Un struct que guarda una referencia lleva un lifetime, atado a los datos que lee.

struct Header<'a> {
    name: &'a str,
    value: &'a str,
}

impl<'a> Header<'a> {
    fn parse(line: &'a str) -> Option<Header<'a>> {
        let (name, value) = line.split_once(": ")?;
        Some(Header { name, value })
    }
}

fn main() {
    let raw = String::from("Content-Type: text/html");
    if let Some(header) = Header::parse(&raw) {
        println!("{} = {}", header.name, header.value);
    }
    println!("{:?}", Header::parse("nonsense").is_none());
}

Cómo funciona

  1. El lifetime se declara en el struct y se usa en el campo.
  2. El struct no puede sobrevivir al texto al que apunta.
  3. Así evitan asignar memoria los parsers de copia cero.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
415
Tokens
150
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 86 segundos.

Escribe este fragmento

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

← Anterior Siguiente →