typestar

Cow: presta hasta que debas poseer en Rust

Clone-on-write devuelve un préstamo si nada cambió y un valor propio cuando sí.

use std::borrow::Cow;

fn normalize(input: &str) -> Cow<str> {
    if input.contains(' ') {
        Cow::Owned(input.replace(' ', "_"))
    } else {
        Cow::Borrowed(input)
    }
}

fn main() {
    for raw in ["already_clean", "needs a change"] {
        let out = normalize(raw);
        let owned = matches!(out, Cow::Owned(_));
        println!("{out} (allocated: {owned})");
    }
    println!("{}", normalize("plain").len());
}

Cómo funciona

  1. Cow::Borrowed no cuesta nada; Cow::Owned asigna memoria.
  2. Quien llama trata ambos igual a través del deref.
  3. Encaja en funciones normalizadoras que casi nunca cambian nada.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
373
Tokens
123
Ritmo de tres estrellas
105 tpm

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

Escribe este fragmento

Paso 1 de 2 en Prestar sin copiar; paso 5 de 11 en Lifetimes y mutabilidad interior.

← Anterior Siguiente →