typestar

RefCell y mutabilidad interior en Rust

RefCell verifica los préstamos en ejecución, así que un valor compartido aún puede mutarse.

use std::cell::RefCell;

struct Log {
    entries: RefCell<Vec<String>>,
}

impl Log {
    fn record(&self, line: &str) {
        self.entries.borrow_mut().push(line.to_string());
    }

    fn count(&self) -> usize {
        self.entries.borrow().len()
    }
}

fn main() {
    let log = Log { entries: RefCell::new(Vec::new()) };
    log.record("started");
    log.record("finished");
    println!("{} entries", log.count());
    println!("{:?}", log.entries.borrow());
}

Cómo funciona

  1. borrow_mut hace panic si ya hay un préstamo vigente.
  2. El valor mismo no necesita una vinculación mut.
  3. Mantén los préstamos cortos para mantener lejos los panics.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
417
Tokens
147
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 80 segundos.

Escribe este fragmento

Paso 1 de 3 en Mutabilidad interior; paso 7 de 11 en Lifetimes y mutabilidad interior.

← Anterior Siguiente →